1. 程式人生 > >Thinkphp 控制器/URL大小寫

Thinkphp 控制器/URL大小寫

URL大小寫

系統預設的規範是根據URL裡面的模組名、控制器名來定位到具體的控制器類的,從而執行控制器類的操作方法。

以URL訪問 http://serverName/index.php/Home/Index/index 為例,其實訪問的控制器類檔案是:

Application/Home/Controller/IndexController.class.php 

如果是Windows環境,無論大小寫如何都能定位到IndexController.class.php檔案,所以下面的訪問都是有效的:

http://serverName/index.php/Home/Index/index
http://serverName/index.php/Home/index/index
http://serverName/index.php/home/index/index

如果在Linux環境下面,一旦大小寫不一致,就會發生URL裡面使用小寫模組名不能找到模組類的情況。例如在Linux環境下面,我們訪問 http://serverName/index.php/home/index/index 其實請求的控制器檔案是

Application/home/Controller/indexController.class.php

因為,我們定義的控制器類是IndexController而不是indexController(參考ThinkPHP的命名規範),由於Linux的檔案特性,其實是不存在indexController控制器檔案的,就會出現Index控制器不存在的錯誤,這樣的問題會造成使用者體驗的下降。

但是系統本身提供了一個不區分URL大小寫的解決方案,可以通過配置簡單實現。

只要在專案配置中,增加:

'URL_CASE_INSENSITIVE' =>true

配置好後,即使是在Linux環境下面,也可以實現URL訪問不再區分大小寫了。

http://serverName/index.php/Home/Index/index
// 將等效於
http://serverName/index.php/home/index/index

這裡需要注意一個地方,一旦開啟了不區分URL大小寫後,如果我們要訪問類似UserTypeController的控制器,那麼正確的URL訪問應該是:

// 正確的訪問地址
http://serverName/index.php/home/user_type/index
// 錯誤的訪問地址(linux環境下)
http://serverName/index.php/home/usertype/index

利用系統提供的U方法(後面一章URL生成會告訴你如何生成)可以為你自動生成相關的URL地址。

如果設定

'URL_CASE_INSENSITIVE' =>false

的話,URL就又變成: http://serverName/index.php/Home/UserType/add

注意:URL不區分大小寫並不會改變系統的命名規範,並且只有按照系統的命名規範後才能正確的實現URL不區分大小寫。