
包含%{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。例如。/index
or /foo
,這會在內部分別將請求重寫為/index.php
和/foo.php
。
在本例中,REQUEST_FILENAME
是 形式的字串/web/webroot/index
。因此,/web/webroot/index.php
在重寫之前就存在測試。如果您要要求,/index.php
那麼狀態失敗並且沒有發生重寫(這是正確的)。
但是,此規則並不嚴格正確,並且在某些情況下可能會導致重寫循環。請參考以下相關問題: