在VirtualHost的范围内的Apache request_uri

此代码在.htaccess或目录中完美工作

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

但是当放入VirtualHost时会导致无限的redirect。

我已经阅读了有关虚拟主机和目录中的request_uri之间差异的文档,但是我仍然无法生成将在虚拟主机上下文中工作的代码。 我应该改变什么?

我想你可能与mod_dir(和DiretcoryIndex )有冲突。 虽然我很惊讶这个“在.htaccess完美的工作”(除非你有其他的东西可以防止循环)?

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

你应该直接改写索引文件,这应该解决问题。 例如:

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

您不需要RewriteCond指令来检查REQUEST_URI ,您可以在RewriteRule 模式中执行相同的检查 – 这样做效率更高一些,并且可以为您节省一个指令。