ThinkCMF配置URL

折腾了一下ThinkCMF的URL重写,以下是一些整理:

ThinkCMF是基于ThinkPHP的,所以其配置很多与ThinkPHP相似,在TP中有这么几种模式:

第一种:普通模式,在配置文件中URL_MODEL值为0,形如:http://localhost/index.php?g=index&m=index&a=index&id=1

上述链接中,g/m/a分别代表模块名称,控制器名称和方法名称(都可以在config.php中配置),最后id为参数。


第二种:PATHINFO 模式,在配置文件中URL_MODEL值为1,形如:http://localhost/index.php/index/index/index/id/1

默认为PATHINFO 模式,可以提供最好的用户体验和SEO支持。上述链接中,“/”是配置文件中的URL_PATHINFO_DEPR的值,可以自由选配分隔符。


第三种:REWRITE  模式,在配置文件中URL_MODEL值为2,形如:http://localhost/index/index/index/id/1

它是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。


第四种:兼容模式,在配置文件中URL_MODEL值为3,是用于不支持PATHINFO的特殊环境,配合服务器的重写规则,可以达到与第三种模式一样的效果。


首先在ThinkCMF后台中“设置”=》“网站信息”=》“URL设置”中选中REWRITE模式,并配上伪静态的后缀。

其次,需要修改nginx的配置,在TP官网找了一篇文章,将

location ~ .*.(php|php5)?$
{
#原有代码
}

修改为:

#去掉$是为了不匹配行末,即可以匹配.php/,以实现pathinfo
#如果你不需要用到php5后缀,也可以将其去掉
location ~ .php
{
#原有代码
                
#定义变量 $path_info ,用于存放pathinfo信息
set $path_info "";
#定义变量 $real_script_name,用于存放真实地址
set $real_script_name $fastcgi_script_name;
#如果地址与引号内的正则表达式匹配
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
#将文件地址赋值给变量 $real_script_name
set $real_script_name $1;
#将文件地址后的参数赋值给变量 $path_info
set $path_info $2;
}
#配置fastcgi的一些参数
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}

另外,还做了以下的修改

if (!-e $request_filename){
             rewrite ^/(.*)$ /index.php/$1;
             #rewrite (.*) /index.php;

}

配置到此结束,重启nginx生效。

如果使用的是apache,则需要配合.htaccess文件进行设置,附一个以前用过的.htaccess文件的内容:


  Options +FollowSymlinks
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L](如果是兼容模式,则写成RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]

你可能感兴趣的:(#,thinkphp,CentOS,#,thinkcmf,#,Nginx,url,#,pathinfo)