thinkphp二级域名配置

ThinkPHP支持分组的二级域名部署,该功能可以使项目中的多个分组呈现为二级域名的形式,例如经过配置二级域名部署,可以把:
http://domain.com/index.php/Admin/或者http://domain.com/Admin/
变为 http://admin.domain.com/ 访问方式。
先配置域名, 以 apache为例 , 配置如下: #主域名

  1.     DocumentRoot  D:\htdocs\www     ServerName domain.com

#子域名
  1.     DocumentRoot  D:\htdocs\www     ServerName admin.domain.com

然后配置host, 以windows为例编辑C:\WINDOWS\system32\drivers\etc\hosts 文件,增加下面两行:
  1. 127.0.0.1  domain.com   127.0.0.1  admin.domain.com

接下来修改程序的配置文件config.php如下
    • 'APP_GROUP_LIST'     => 'Home,Test,Admin',  'DEFAULT_GROUP'      =>'Home',  'APP_SUB_DOMAIN_DEPLOY'=>1, // 开启子域名配置     /*子域名配置      *格式如: '子域名'=>array('分组名/[模块名]','var1=a&var2=b');      */      'APP_SUB_DOMAIN_RULES'=>array(            'admin'=>array('Admin/'),  // admin域名指向Admin分组         'test'=>array('Test/'),  // test域名指向Test分组     ),

      首先是在config.php文件中开启二级域名配置

      'APP_SUB_DOMAIN_DEPLOY' => true

       

      然后配置二级域名规则如下:

         'APP_SUB_DOMAIN_RULES' => array(    'admin'    => array('admin'), // 二级域名       'data'    => array('data'), // 二级域名    'www'      => array('home'),//前台域名    'html'  => array('html'),//静态页面       'data'  => array('data'),//静态页面    '*'        => array('te','DDD=*'), // 二级泛域名    'top.admin' => array('admin/admin','var=1'), // 三级域名       '*.blog'   => array('blog','ABD=445&USER=*'), // 三级泛域名   ),

       

      接下来进行host配置,在本机测试的时候需要自己配置如:127.0.0.1 ddd.bbs.com127.0.0.1 te.bbs.com127.0.0.1 data.bbs.com127.0.0.1 test.blog.bbs.com127.0.0.1 tt.blog.bbs.com

       

      最后配置apache

      vhost配置我找到了一种最简便的方法如:<VirtualHost *:80>   DocumentRoot "E:\wamp\www\bbbb"   ServerName bbs.com   ServerAlias *.bbs.com # 开通泛解析</VirtualHost>

      项目配置请看项目里的config.php

       

      注:vhost配置中的ServerAlias是域名别名的意思,用*号表示匹配所有的子域名到本域名下

      后面的就交给thinkphp去解析了

      在官方手册去查了下,没有具体说明怎么支持二级域名的方法,最后找到一个解决方案(修改thinkphp的parsePathInfo函数让其支持二级域名)。

      # 修改的路径是: # ThinkPHP\Lib\Think\Util\Dispatcher.class.php private static functionparsePathInfo() { $pathInfo = array(); if(C('URL_PATHINFO_MODEL')==2){ $paths =explode(C('URL_PATHINFO_DEPR'),trim($_SERVER['PATH_INFO'],'/'));   $APP_LEVEL_DOMAINS= false; $domain = array_shift(explode('.',$_SERVER['HTTP_HOST']));  if(in_array($domain, C('APP_LEVEL_DOMAINS'), true)){ $APP_LEVEL_DOMAINS = true; }  if(C('APP_LEVEL_DOMAIN_DEPLOY_ON') && $APP_LEVEL_DOMAINS) { if(isset($paths[0]) &&strtolower($paths[0]) == strtolower($domain)){ array_shift ($paths); }$pathInfo[C('VAR_MODULE')] = ucfirst(array_shift(explode('.',$_SERVER['HTTP_HOST'])));$pathInfo[C('VAR_ACTION')] = array_shift($paths); } else { $groupApp =C('APP_GROUP_LIST'); if ($groupApp) { $arr =array_map('strtolower',explode(',',$groupApp)); $pathInfo[C('VAR_GROUP')] =in_array(strtolower($paths[0]),$arr) ? array_shift($paths) : ''; }$pathInfo[C('VAR_MODULE')] = array_shift($paths); $pathInfo[C('VAR_ACTION')] =array_shift($paths); } for($i = 0, $cnt = count($paths); $i < $cnt; $i++){if(isset($paths[$i+1])) { $pathInfo[$paths[$i]] = (string)$paths[++$i]; }elseif($i==0){ $pathInfo[$pathInfo[C('VAR_ACTION')]] = (string)$paths[$i]; } } }else { $res =preg_replace('@(\w+)'.C('URL_PATHINFO_DEPR').'([^,\/]+)@e','$pathInfo[\'\\1\']="\\2";', $_SERVER['PATH_INFO']); } return $pathInfo; }

      用上面这个函数替换后就能支持二级域名了,不过还有事情要做。在项目的配置文件(config.php)里面加上二级域名支持。

      return array( #'配置项'=>'配置值' 'DEBUG_MODE' => true, 'URL_MODEL' => 2,'APP_LEVEL_DOMAIN_DEPLOY_ON' => true, #标识打开二级域名支持 'APP_LEVEL_DOMAINS' =>array('sites','seo'), #例:如果是sites.ys250.com 那么将采用2级别域名的方式#'URL_HTML_SUFFIX'=>'.html', #'URL_ROUTER_ON' => true


      结果如:
      http://www.ys250.com/sites/ip (old)
      http://sites.ys250.com/ip (new)
      http://www.ys250.com/seo (old)
      http://seo.ys250.com (new)
      http://ips.ys250.com/ 让采用老的方式,因为ips没有开通二级支持支持,因此大家要开通自己的二级域名请设置APP_LEVEL_DOMAINS这个数组。




      暂时只支持二级域名的部署,更深层级的还在想使用GROUP分组形式好还是使用Router来进行检测。不喜欢废话,直接切入主题:

      修改ThinkPHP/Lib/Think/Util/Dispatcher.class.php

      找到parsePathInfo方法,修改为:

       

      1. private static function parsePathInfo()   
      2. {   
      3.     $pathInfo = array();   
      4.     if(C('URL_PATHINFO_MODEL')==2){   
      5.         $paths = explode(C('URL_PATHINFO_DEPR'),trim($_SERVER['PATH_INFO'],'/'));   
      6.         if(C('APP_LEVEL_DOMAIN_DEPLOY_ON')) {   
      7.             $pathInfo[C('VAR_MODULE')] = ucfirst(array_shift(explode('.',$_SERVER['HTTP_HOST'])));   
      8.             $pathInfo[C('VAR_ACTION')] = array_shift($paths);   
      9.         } else {   
      10.             $groupApp = C('APP_GROUP_LIST');   
      11.             if ($groupApp) {   
      12.                 $arr = array_map('strtolower',explode(',',$groupApp));   
      13.                 $pathInfo[C('VAR_GROUP')] = in_array(strtolower($paths[0]),$arr)? array_shift($paths) : '';   
      14.             }   
      15.             $pathInfo[C('VAR_MODULE')] = array_shift($paths);   
      16.             $pathInfo[C('VAR_ACTION')] = array_shift($paths);   
      17.         }   
      18.         for($i = 0, $cnt = count($paths); $i < $cnt$i++){   
      19.             if(isset($paths[$i+1])) {   
      20.                 $pathInfo[$paths[$i]] = (string)$paths[++$i];   
      21.             }elseif($i==0) {   
      22.                 $pathInfo[$pathInfo[C('VAR_ACTION')]] = (string)$paths[$i];   
      23.             }   
      24.         }   
      25.     }else {   
      26.         $res = preg_replace('@(/w+)'.C('URL_PATHINFO_DEPR').'([^,//]+)@e''$pathInfo[/'//1/']="//2";'$_SERVER['PATH_INFO']);   
      27.     }   
      28.     return $pathInfo;   
      29. }   

      在App/Conf/config.php中添加配置:
      'APP_LEVEL_DOMAIN_DEPLOY_ON' => true
      即可开启二级域名部署

      访问:level.domain.com/index.html
      Module为LevelAction
      Action为index

      访问:payment.domain.com/gateway.html
      Module为PaymentAction
      Action为gateway



      首先是在config.php文件中开启二级域名配置

      'APP_SUB_DOMAIN_DEPLOY' => true

       

      然后配置二级域名规则如下:

          'APP_SUB_DOMAIN_RULES'  => array(
           'admin'     => array('admin'), // 二级域名
              'data'     => array('data'), // 二级域名
           'www'       => array('home'),//前台域名
           'html'  => array('html'),//静态页面
              'data'  => array('data'),//静态页面
           '*'         => array('te','DDD=*'), // 二级泛域名
           'top.admin' => array('admin/admin','var=1'), // 三级域名
              '*.blog'    => array('blog','ABD=445&USER=*'), // 三级泛域名
          ),

       

      接下来进行host配置,在本机测试的时候需要自己配置
      如:
      127.0.0.1 ddd.bbs.com
      127.0.0.1 te.bbs.com
      127.0.0.1 data.bbs.com
      127.0.0.1 test.blog.bbs.com
      127.0.0.1 tt.blog.bbs.com

       

      最后配置apache

      vhost配置我找到了一种最简便的方法
      如:
      <VirtualHost *:80>
          DocumentRoot "E:\wamp\www\bbbb"
          ServerName bbs.com
          ServerAlias *.bbs.com # 开通泛解析
      </VirtualHost>

      项目配置请看项目里的config.php

       

      注:vhost配置中的ServerAlias是域名别名的意思,用*号表示匹配所有的子域名到本域名下

      后面的就交给thinkphp去解析了!



 

转载于:https://www.cnblogs.com/beyondhjjyt/archive/2013/04/08/3046518.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值