%{REQUEST_FILENAME}.ext 是什麼意思?為什麼要有額外的 .ext 結尾?

%{REQUEST_FILENAME}.ext 是什麼意思?為什麼要有額外的 .ext 結尾?

包含%{REQUEST_FILENAME}這樣的字串:

/web/webroot/index.php

我看到很多人建議測試文件是否存在並且具有 .php 副檔名,如下所示:

RewriteCond %{REQUEST_FILENAME}.php -f

.php後面的不是%{REQUEST_FILENAME}多餘的嗎?該變數應該已經包含.php,對吧?

似乎添加.php%{REQUEST_FILENAME}會使 TestString 檢查添加額外的 .php,如下所示:

/web/webroot/index.php.php

我確信我錯過了一些簡單的東西,但我只是不知道它是什麼。

上下文是這樣的:

RewriteCond %{THE_REQUEST} ^.*?\.php [NC]
RewriteRule ^ - [R=404,NE,L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]

答案1

.php後面的不是%{REQUEST_FILENAME}多餘的嗎?該變數應該已經包含.php,對吧?

嗯,是或否,這取決於你想做什麼。

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]

此規則允許您請求無副檔名 URL。例如。/indexor /foo,這會在內部分別將請求重寫為/index.php/foo.php

在本例中,REQUEST_FILENAME是 形式的字串/web/webroot/index。因此,/web/webroot/index.php在重寫之前就存在測試。如果您要要求,/index.php那麼狀態失敗並且沒有發生重寫(這是正確的)。

但是,此規則並不嚴格正確,並且在某些情況下可能會導致重寫循環。請參考以下相關問題:

相關內容