天天看點

URL大小寫問題

像tp這樣的mvc架構一般預設的規範是根據URL裡面的子產品名、控制器名來定位到具體的控制器類的,進而執行控制器類的操作方法。是以url就非常重要。我們通過程式可以獲得解析得到url裡面包含的mvc參數,進而組合定位到真正的php執行檔案。

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

1:Application/Home/Controller/IndexController.class.php

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

2:Application/Home/Controller/indexController.class.php

那麼問題來了,

如果是在windows環境下,1和2其實是一個檔案,因為windows是不區分大小寫的。但是如果是linux環境下,1和2就是兩個檔案,因為linux是區分大小寫的。

是以如果我們的主機的是linux伺服器的話,那麼url的大小寫一定是要注意的。

為了解決這個問題,tp架構提供了一種技術方案,可以使得不管你的url是大寫還是小寫,在linux主機上都可以定位都同一個php檔案。

原理:

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

url2: http://serverName/index.php/Home/index/index

假設使用者通路url1和url2,程式分離出uel1的mvc參數為Home,Inde和index,url2的mvc參數為Home,index和index,現在我們還要相容Windows和linux伺服器,是以程式配置檔案會有一個參數即大小寫不敏感’URL_CASE_INSENSITIVE’ ,檢測如果此參數為true,即大小寫不敏感,現在要想使得在linux上和windows大小寫不明感,做以下處理:

把mvc參數都小寫化,然後分别把各個參數首字母大寫化,這樣處理後保證了每個參數的首字母都是大寫,其他字母小寫,組合出來的檔案路徑也是符合tp架構的規範的。

這裡有個需要注意的地方就是,如果你定義的是這樣類型的子產品類UserTypeAction,子產品名兩個首字母大寫,通過加下劃線的方式來通路,

http://www.51php.com/index.php/user_type/add

url中應該寫成user_type這樣的形式,那麼一旦開啟大小寫不敏感,程式會自動将這種形式轉化成UserType這樣的形式。