2014-01-23 74 views
7

我有一個簡單的問題,但無法找到答案任何地方當我在.php url後加上斜線(/)時會發生什麼?

說我有一個網站「mysite.com」。 我可以通過輸入「mysite.com」或「mysite.com/index.php」訪問索引頁面。 這工作正常......但是,當我嘗試去「mysite.com/index.php/」頁面加載,但不正確。 究竟發生了什麼?我認爲它應該返回一個404錯誤,因爲index.php將被視爲一個(不存在的)目錄(即我認爲它會嘗試找到「mysite.com/index.php/index.php」)。 這顯然不是這種情況。有人可以告訴我究竟發生了什麼嗎? 當你在斜線後面加上任何東西時,也是如此,即「mysite.com/index.php/hello」

謝謝。

+0

它只是作爲PATH_INFO處理。然而,虛擬路徑片段打破了相關資源鏈接(CSS,圖像)。 – mario

+0

感謝您的回覆。我還是不太明白。最重要的是允許這樣的網址有效嗎?爲什麼不只是返回404錯誤? – Guy

回答

4

這是由於您的Apache環境變量PATH_INFO。

PATH_INFO

其實,PATH_INFO是關係到Apache Web服務器提供服務的PHP頁面和每說不是PHP。

PATH_INFO是一個由Apache在打開AcceptPathInfo指令時設置的環境變量。它將包含跟隨實際文件名(或現有目錄中不存在的文件)的尾隨路徑名信息將被接受或拒絕。然後將環境變量傳遞給負責渲染頁面的Apache/CGI模塊。

該變量可以在PHP中使用$ _SERVER ['PATH_INFO']進行訪問。

例如,假設location/test /指向僅包含單個文件here.html的目錄。然後請求/test/here.html/more和/test/nothere.html/more都收集/更多作爲PATH_INFO。當服務器注意到URL中的「目錄」是一個腳本,而不是實際的目錄,它運行的腳本

這個答案是從安德魯·穆爾 Link to original answer

+0

這對Apache來說真的很獨特嗎? NGINX不會做同樣的事情? – Barmar

+3

如果您從其他答案複製,則需要署名。 – mario

+0

@mario我已經給另一個問題的鏈接。 –

1

複製。 URL中路徑的其餘組件放在PHP變量$_SERVER['PATH_INFO']中。

相關問題