我的 .htaccess 文件中有以下几行:
#redirect A
RewriteCond %{DOCUMENT_ROOT}/partners/$1/index.shtml -f
RewriteRule ^(.*) /partners/$1/ [R=301,L]
这些行检查目录是否存在,如果存在则重定向用户。
#redirect B
RewriteCond %{DOCUMENT_ROOT}/partners/$1/index.shtml !-f
RewriteRule ^(.*) /partners/default.php?code=$1 [R=301,L]
同样,这些行检查目录是否不存在,如果找不到该目录,则将用户重定向到其他地方。
这是发生了什么:假设我访问www.example.com/andyf
并且andyf
目录中不存在该文件夹partners
,然后我被带到www.example.com/partners/default.php?code=andyf
到目前为止,一切都很好。
但是,如果andyf
稍后创建目录,我仍然会被带到该default.php
页面,即使现在存在正确的目录。这取决于已实施的 301 重定向。
让我感到困惑的是,如果在每个请求上都读取.htaccess 文件,那么为什么重定向 A 不覆盖重定向 B?还是像我怀疑的那样,在读取 .htaccess 文件之前发生了 301 重定向?