导航:首页 > IDC知识 > thinkphp子域名路由

thinkphp子域名路由

发布时间:2021-02-25 17:42:08

1、thinkphp分组后url路由不起作用了怎么办

ThinkPHP URL 路由功能详解与实例
本节内容导读
本节内容主要介绍 ThinkPHP 路由功能与 U方法的使用,分为下面几个部分:
ThinkPHP URL 路由功能详解:
URL 路由就是允许你在一定规则下定制你需要的 URL 样子,以达到美化 URL ,提高用户体验,也有益于搜索引擎收录的目的。
例子
原本的 URL 为:
http://www.******.com/index.php/Procts/Show/category/5/id/123
该 URL 的本意是显示第 5 分类中 id 为 123 的产品。经过 URL 路由改写后 URL 可以为:
http://www.******.com/index.php/proct/5/123
如果使用 .htaccess 文件的 Rewrite 规则再把入口文件隐藏,则上面的 URL 可以进一步简化为:
http://www.******.com/proct/5/123
这个 URL 地址就相对比较简单易容。
提示:使用 Apache 的 URL Rewrite 规则也能达到 URL 定制的功能,在此就不展开了,感兴趣的请参看 Apache Rewrite 相关的文章。
ThinkPHP URL 路由配置
在 ThinkPHP 中要使用 URL 路由功能,需要做如下配置:
在项目配置文件 Conf/config.php 里面开启路由功能(设置为 true):
'URL_ROUTER_ON' => true,
路由规则定义
与 2.x 版本不同,3.0 路由规则定义于项目配置文件 config.php 内,格式为数组格式,具体定义规则又分为规则路由和正则路由。规则路由语法如下:
格式1:'路由规则'=>'[分组/模块/操作]?额外参数1=值1&额外参数2=值2...'
格式2:'路由规则'=>array('[分组/模块/操作]','额外参数1=值1&额外参数2=值2...')
格式3:'路由规则'=>'外部地址'
格式4:'路由规则'=>array('外部地址','重定向代码')
语法说明
路由规则即是我们要在 URL 中显示出来规则,后面元素值部分是实际的 URL 地址及参数
路由规则中如果以 : 开头,表示动态变量,否则为静态地址
格式2的额外参数可以传入数组或者字符串
路由规则支持变量的数字约束定义,例如:'proct/:id\d'=>'Procts/Show'
路由规则非数字变量支持排除,例如 'news/:cate^add|edit|delete'=>'News/category'
路由规则支持完整匹配定义,例如:'proct/:id\d$'=>'Procts/Show'
路由规则中的静态地址部分不区分大小写
外部地址中如果要引用动态变量, 采用 :1、:2 的方式
规则路由可以支持 全动态和动静结合定义,例如 ':user/blog/:id'=>'Home/Blog/user'
这些规则及语法说明比较晦涩难懂,下面会有实例来对照以便理解上述路由规则及语法说明。
如果在配置文件里定义了路由开启功能,系统在执行 Dispatch 解析的时候,会判断当前 URL 是否存在定义的路由名称,如果有就会按照定义的路由规则来进行 URL 解析。
ThinkPHP URL 路由实例
以本文开始的例子为例,看该路由是如何定义的。在项目配置文件 Conf/config.php 里定义如下规则:
//路由定义
'URL_ROUTE_RULES'=> array(
'proct/:category\d/:id\d'=>'Procts/Show', //规则路由
),
当我们访问如下这个地址的时候:
http://www.******.com/index.php/proct/5/123
会将该地址解析到 Procts 模块的 Show 操作,并传入 get 参数 category=5&id=123。
如果有额外的固定参数,如 status=1,可以定义路由:
'proct/:category\d/:id\d'=>'Procts/Show?status=1', //规则路由
也即匹配下面这个 URL 地址:
http://www.*****.com/index.php/proct/5/123/1
上面都是按格式1来定义的路由,在有额外参数的情况下,可以转换为第2种定义格式:
'proct/:category\d/:id\d'=>array('Procts/Show','status=1')
上面的路由规则中 \d 表示只匹配数字,当不加此约束时,则可匹配所有字符,这也是默认情况。如果要严格约定传入的参数格式,请使用正则路由定义规则。
路由格式:外部地址
对于路由格式 3 和格式 4,则是检测到匹配的路由格式,则跳转到外部地址,区别是格式 4 有重定向代码,如 301 代表永久重定向。

2、thinkphp 怎样动态配置路由,怎样从数据库调取数据来配置路由

用这个方法: Route::get('detail-<name>-<id>', 'proct/detail');
<name>和<id> 后台自己定义内容
例:域名回/detail-xxxx-23

xxxx 从数据库调答取数据

3、thinkphp 配置路由

这种效果单凭用thinkphp的配置是实现不了的,要想实现首先应该考虑隐藏入口文件。

以下是几种环境下的配置:

apache:

1.httpd.conf配置文件中加载了mod_rewrite.so模块 //在APACHE里面去配置

#LoadMole rewrite_mole moles/mod_rewrite.so把前面的警号去掉

2.AllowOverride None 讲None改为 All //在APACHE里面去配置
<Directory "D:/server/apache/cgi-bin">
AllowOverride none 改 AllowOverride ALL

Options None
Order allow,deny
Allow from all
</Directory>

3.确保URL_MODEL设置为2,

在项目的配置文件里加入

return Array(
// .....
'URL_MODEL' => '2',
// .....
);

4 .htaccess文件必须放到跟目录下

这个文件里面加:

<IfMole mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfMole>

补充:在windows下不能建立以点开头的文件,你可以先随便建立一个文件

然后在DOS在操作 rename xxxx.xxxx .htaccess

IIS环境:

如果你的服务器环境支持ISAPI_Rewrite的话,可以配置httpd.ini文件,添加下面的内容:
RewriteRule (.*)$ /index\.php\?s=$1 [I]

在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:
<rewrite>
<rules>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>

Nginx环境:

在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

location / { // …..省略部分代码
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

其实内部是转发到了ThinkPHP提供的兼容模式的URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

如果你的ThinkPHP安装在二级目录,Nginx的伪静态方法设置如下,其中youdomain是所在的目录名称。

location /youdomain/ {
if (!-e $request_filename){
rewrite ^/youdomain/(.*)$ /youdomain/index.php?s=$1 last;
}
}

4、thinkphp3.1 二级域名部署和各个二级域名的URL路由设置 ,配置文件怎么写?????

http://doc.thinkphp.cn/manual/sub_domain_deploy.html
ThinkPHP支持分组的二级域名部署,该功能可以使项目中的多个分组呈现为二级域名的形式,例如经过配置二级域名部署,可以把:
http://domain.com/index.php/Admin/或者http://domain.com/Admin/
变为 http://admin.domain.com/ 访问方式。
先配置域名, 以 apache为例 , 配置如下:
#主域名
DocumentRoot D:\htdocs\www
ServerName domain.com
#子域名
DocumentRoot D:\htdocs\www
ServerName admin.domain.com
ServerAlias *.domain.com
然后配置host, 以windows为例编辑C:\WINDOWS\system32\drivers\etc\hosts 文件,增加下面两行:
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分组
),

3

5、thinkphp如何绑定二级域名

先在根目录创建一个手机目录,名称随意,再创建一个手机模块

手机目录版里面有个权新的index.php入口文件,内容如下

定义一个define绑定到手机模块中,这样就行了,至于页面跳转用js跳转到:域名/mobile,或者直接绑定二级域名到根目录下的mobile文件夹即可

6、thinkphp如何获取二级域名前缀然后跳转到其他的后缀

这个与框架无关,这只要获取到访问域名就可以判断了

php中$_SERVER['SERVER_NAME']就可以访问当前域名;

确定域名后用explode分离域名为数组获取域名前缀就是为0的数组

7、什么是thinkPHP路由,路由有什么作用

thinkphp的路由可以让你的URL地址更加简洁和优雅,比如在没有定义路由时的访问url为回http://serverName/index.php/Home/News/read/id/8,在定义路由后可以通过答http://serverName/index.php/Home/new/8进行相同效果的访问~

8、thinkphp3.1.2 重写+路由下的url问题

1、用的是apache,请在项目根目录中添加一个文件.htaccess,里面的内容如下

<IfMole mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d 
  RewriteCond %{REQUEST_FILENAME} !-f 
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfMole>

并且在httpd.conf中,将

LoadMole rewrite_mole libexec/apache2/mod_rewrite.so

这一行内的注释去掉。容

2、如果你的是nginx,在对应的server中添加

if (!-e $request_filename) {
                rewrite "^/(.*)$" /index.php last;
        }

 修改完成后,别忘记重启服务

9、thinkphp3.1.3 开启子域名部署后,如何对每个分组进行独立路由?

如果只启用m子域名,admin/xxx/xxx是可以正常用的。
如果有些地址不能访问,添加路由规则即可
'URL_ROUTER_ON' => true,
'URL_ROUTE_RULES' => array();

与thinkphp子域名路由相关的知识