ThinkPHP3.2====》url模式的型別
ThinkPHP的URL是區分大小寫的(主要針對模組名,控制器名,操作名,不包含引數),如果想設定為不區分大小寫,需要新增配置
'URL_CASE_INSENSITIVE' => true, //為true為不區分大小寫,為預設值
當開啟除錯模式的情況下,這個引數是false,因此你會發現在除錯模式下面URL區分大小寫的情況。
ThinkPHP支援的URL模式有四種:普通模式、PATHINFO、REWRITE和相容模式,可以設定URL_MODEL引數改變URL模式。
URL模式 | URL_MODEL設定 |
---|---|
普通模式 | 0 |
PATHINFO模式(預設模式) | 1 |
REWRITE模式 | 2 |
相容模式 | 3 |
如果你整個應用下面的模組都是採用統一的URL模式,就可以在應用配置檔案中設定URL模式,如果不同的模組需要設定不同的URL模式,則可以在模組配置檔案中設定。
1、普通模式
普通模式也就是傳統的GET傳參方式來指定當前訪問的模組和操作,例如: http://localhost/?m=home&c=user&a=login&var=value
m引數表示模組,c引數表示控制器,a引數表示操作(當然這些引數都是可以配置的),後面的表示其他GET引數。
如果預設的變數設定和你的應用變數有衝突的話,你需要重新設定系統配置,例如改成下面的:
'VAR_MODULE' => 'module', // 預設模組獲取變數
'VAR_CONTROLLER' => 'controller', // 預設控制器獲取變數
'VAR_ACTION' => 'action', // 預設操作獲取變數
上面的訪問地址則變成: http://localhost/?module=home&controller=user&action=login&var=value
注意,VAR_MODULE只能在應用配置檔案中設定,其他引數可以則也可以在模組配置中設定
2、PATHINFO模式
PATHINFO模式是系統的預設URL模式,提供了最好的SEO支援,系統內部已經做了環境的相容處理,所以能夠支援大多數的主機環境。對應上面的URL模式,PATHINFO模式下面的URL訪問地址是:http://localhost/index.php/home/user/login/var/value/
PATHINFO地址的前三個引數分別表示模組/控制器/操作。
不過,PATHINFO模式下面,依然可以採用普通URL模式的引數方式,例如: http://localhost/index.php/home/user/login?var=value
依然是有效的
PATHINFO模式下面,URL是可定製的,例如,通過下面的配置:
// 更改PATHINFO引數分隔符
'URL_PATHINFO_DEPR'=>'-',
我們還可以支援下面的URL訪問: http://localhost/index.php/home-user-login-var-value
3、
REWRITE模式
REWRITE模式是在PATHINFO模式的基礎上添加了重寫規則的支援,可以去掉URL地址裡面的入口檔案index.php,但是需要額外配置WEB伺服器的重寫規則。
如果是Apache則需要在入口檔案的同級新增.htaccess檔案,內容如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
接下來,就可以用下面的URL地址訪問了: http://localhost/home/user/login/var/value
更多環境的URL重寫支援參考部署部分的URL重寫。(雖然沒懂啥意思)
4、相容模式
相容模式是用於不支援PATHINFO的特殊環境,URL地址是: http://localhost/?s=/home/user/login/var/value
可以更改相容模式變數的名稱定義,例如:
'VAR_PATHINFO' => 'path'
PATHINFO引數分隔符對相容模式依然有效,例如:
// 更改PATHINFO引數分隔符
'URL_PATHINFO_DEPR'=>'-',
使用以上配置的話,URL訪問地址可以變成: http://localhost/?path=/home-user-login-var-value
相容模式配合Web伺服器重寫規則的定義,可以達到和REWRITE模式一樣的URL效果。
例如,我們在Apache下面的話,.htaccess檔案改成如下內容:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>
就可以和REWRITE模式一樣訪問下面的URL地址訪問了: http://localhost/home/user/login/var/value