%{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]
好吧,是也不是,这取决于您要做什么。
此规则允许您请求无扩展名的 URL。例如。
/index
or/foo
并且这在内部将请求分别重写为/index.php
和/foo.php
。在本例中,
REQUEST_FILENAME
是一个形式为 的字符串/web/webroot/index
。因此,它是/web/webroot/index.php
在重写之前存在的测试。如果您要请求/index.php
,则条件失败并且不会发生重写(这是正确的)。但是,此规则并不完全正确,并且在某些情况下可能会导致重写循环。请参阅以下相关问题: