2010-04-14 30 views
6

我注意到的URI,有時(尤其是在mod_rewrite的是不可用)這條路徑方案用於:的可靠性如何像/index.php/seo_path

http://host/path/index.php/clean_url_here 
--------------------------^ 

似乎工作,至少在Apache,其中index.php被調用,並且可以通過$_SERVER['PATH_INFO']查詢/clean_url_here部分。 PHP甚至可以使用kind of advertises這個功能。另外,例如,CodeIgniter框架使用這種技術作爲其URL的默認值。

問題:該技術有多可靠?是否有情況,Apache不會撥打index.php但嘗試解決路徑問題?那麼lighttpd,nginx,IIS,AOLServer呢?

ServerFault的問題?我認爲在PHP代碼中使用這個功能還有很多。所以我在這裏問。

附錄:正如VolkerK所建議的,這個問題的一個合理的擴展是:程序員如何影響各種服務器類型的存在$_SERVER['PATH_INFO']

回答

4

我認爲這個問題同樣適用於stackoverflow和serverfault。例如。作爲開發人員,我只能告訴你,pathinfo與任何用戶輸入(這意味着它可以包含幾乎任何東西)一樣可信,並且腳本可能會或可能不會收到它,具體取決於Web服務器版本和配置:

Apache: AcceptPathInfo
IIS:eg AllowPathInfoForScriptMappings和其他
等等等等......

但是服務器管理員可能可以告訴你哪些設置,你可以期望「在現實世界中」,爲什麼是首選的設置。
所以問題就變成:你(或預期的用戶基數)對服務器配置有多大影響。

+0

感謝您的Apache和IIS鏈接。經過一些Google搜索(基於最近獲得的關於AcceptPathInfo的知識),我發現了一個nginx的解決方案:http://kbeezie.com/view/php-self-path-nginx/ – Boldewyn 2010-04-14 08:05:47

0

從我的經驗,我會說PATH_INFO通常在正常的網絡託管環境和服務器設置可用 - 即使是在IIS - 但在極少數情況下,事實並非如此。在構建應該儘可能多的平臺上部署的應用程序時,我不會在硬編碼級別上信任path_info。

只要我能,我嘗試建立一個包裝函數build_url()的是,根據配置設置,使用或者

  • 原始URL www.example.com/index.php?clean_url=clean_url_here
  • 的PATH_INFO機制www.example.com/index.php/clean_url
  • 的mod_rewrite www.example.com/clean_url

並在應用程序發出的所有URL中使用它。

+0

抽象總是一個好主意,同意。但是,我想具體瞭解PATH_INFO的體驗以及此功能的可用性。 – Boldewyn 2010-04-14 08:04:17

0

可能有一些天真的腳本(例如自動鏈接)無法識別此URL的格式。從而降低創建鏈接到您的內容的機會。
由於本土正則表達模式在這些任務中很常見,因此失敗的可能性相當真實。

從技術上講,這些網址是好的。 SEO明智,他們'不完美'。