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不區分大小寫。