此代码在 .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
图案- 这稍微更有效率,并且为你节省了指令。