我在共享服務器上有一個網站,在 public_html 目錄中有一些非常基本的 php 頁面,以及一些包含其他頁面的子目錄:
index.php
test.php
subdir1/index.php
subdir2/index.php
查看我的訪問者日志,我正在訪問 index.php/some_text 和 index.php/some_other_text 等等。我天真地希望那些會收到 http 狀態 404,因為 a) 沒有名為 index.php 的目錄,并且 b) 不存在名為 some_text 和 some_other_text 的檔案。但是 Apache 回傳的檔案 index.php 的 http 狀態為 200。
有什么我可以在 .htaccess 中設定的東西,在這些情況下會回傳 404 狀態,而不限制有效的子目錄?
我發現了一些設定“DirectorySlash Off”的建議,但這并沒有什么區別。我也試過
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ - [R=404,L]
但這也沒什么區別。謝謝。
uj5u.com熱心網友回復:
我越來越訪問
index.php/some_text和index.php/some_other_text等。
URL 中以斜杠開頭并跟隨物理檔案的部分稱為附加路徑名資訊(或path-info)。所以,/some_text(在你的例子中)是路徑資訊。
在這種情況下,index.php接收請求并/some-text通過PATH_INFO環境變數傳遞給腳本(在 PHP 中,這在$_SERVER['PATH_INFO']超全域變數中可用)。
默認情況下,路徑資訊對 URL 是否有效取決于負責請求的處理程式。PHP 檔案默認允許路徑資訊,但.html檔案不允許。因此,默認情況下/index.html/some-text 將導致 404。
您可以通過AcceptPathInfo Off在 Apache 配置/.htaccess檔案中進行設定來禁用路徑資訊。通過這樣做,請求/index.php/some-text現在將導致 404。
相反,如果您設定AcceptPathInfo Onthen/index.html/some-text也將被允許。
請注意,某些框架使用路徑資訊以前端控制器模式路由請求(而不是使用查詢字串或直接決議請求的 URI)。
參考:
- https://httpd.apache.org/docs/2.4/mod/core.html#acceptpathinfo
我發現了一些設定“DirectorySlash Off”的建議
這與這個問題無關。設定DirectorySlash Off可防止 mod_dir 將尾部斜杠附加到目錄請求。
uj5u.com熱心網友回復:
我已經嘗試過
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/[^/] \.php/.*$
RewriteRule ^(.*)$ - [R=404,L]
這只會影響根目錄中的 *.php 檔案,而不會影響任何子目錄。我認為。它產生了我想要的行為,但感覺不是一個好的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387981.html
上一篇:Apache組態檔和埠
