VirtualHost 范围内的 Apache request_uri

VirtualHost 范围内的 Apache request_uri

此代码在 .htaccess 或目录中完美运行

RewriteEngine on
RewriteCond %{request_uri} !^/dir/$ [NC]
RewriteRule ^(.*)$ /dir/ [END]

但当放入 VirtualHost 时它会导致无限重定向。

我已阅读有关虚拟主机和目录范围内 request_uri 之间的差异的文档,但我仍然无法编写可在虚拟主机上下文中运行的代码。我应该进行哪些更改?

答案1

我认为您可能与 mod_dir (和 ) 有冲突DirectoryIndex。尽管我很惊讶这“在.htaccess”中完美运行 (除非您有其他可以防止循环的东西)?

如果您重写为裸目录,即,/dir/那么 mod_dir 将触发一个内部子请求/dir/index.php(或您DirectoryIndex设置的任何内容),并且这可能会触发无限循环(尽管您END有标志),因为/dir/index.php匹配!^/dir/$

您应该直接重写索引文档,这样就可以解决问题。例如:

RewriteEngine on
RewriteRule !^/?dir/$ /dir/index.php [END]

您不需要RewriteCond检查的指令REQUEST_URI,您可以在RewriteRule 图案- 这稍微更有效率,并且为你节省了指令。

相关内容