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文件的內容:

<IfModule mod_rewrite.c>
  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]
</IfModule>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章