我正在处理一个.htaccess
文件,并且遇到了REQUEST_FILENAME
的一些好奇行为,我希望对此有所了解。我有两个我正在测试的规则是这样的:
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ /index.php [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/index.php$ /other_page.php [L]
当我尝试转到地址site.com/this_file_exists.php
时,我似乎要转到other_page.php
,这意味着
REQUEST_FILENAME
是第一个RewriteCond中的文件,但不是文件
当mod_rewrite
处理第二个RewriteCond时。
将第二个RewriteRule的标志更改为[L,E=RF:%{REQUEST_FILENAME}]
,echo
$_SERVER['REDIRECT_RF']
other_page.php
后,我发现请求文件名仅为/index.php
,与原始文件名相对,即/full/path/to/this_file_exists.php
。
匹配RewriteRule后,mod_rewrite
是否一直以这种方式覆盖REQUEST_FILENAME
?如果是这样,是否有记录的方式来做到这一点?
答案 0 :(得分:0)
mod_rewrite.c
/* Now adjust API's knowledge about r->filename and r->args */
r->filename = newuri;
似乎暗示新的REQUEST_FILENAME真的是 重写的URI。