Apache-2.4
%{REQUEST_FILENAME}.ext 是什麼意思?為什麼額外的 .ext 結尾?
%{REQUEST_FILENAME}
包含這樣的字元串:/web/webroot/index.php
我看到很多人建議測試一個文件是否存在並且具有這樣的 .php 副檔名:
RewriteCond %{REQUEST_FILENAME}.php -f
.php
後面不是%{REQUEST_FILENAME}
多餘的嗎?變數應該已經包含.php
,對吧?似乎添加
.php
after%{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]
.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
,則條件失敗並且不會發生重寫(這是正確的)。但是,此規則並不完全正確,並且在某些情況下可能會導致重寫循環。請參閱以下相關問題: