如何解决为什么 .htaccess RewriteRule 不适用于根路径 / 但适用于所有其他文件和子目录?
我正在使用 Nextcloud Docker container 并将原始 .htaccess 文件替换为以下代码来测试重定向所有请求:
DirectoryIndex index.PHP index.html
Options +FollowSymLinks -MultiViews -Indexes
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule . /foo\.PHP [L,R=307]
</IfModule>
每个访问都被重定向,除了根,我打开如下:
http://192.168.178.9:8666/?randomchars(随机字符以避免重定向缓存)
.htaccess 位于根目录中:
以下 URL 也被重定向:
http://192.168.178.9:8666/index.php?randomchars
所以这仅对“/”路径有效。可能是什么原因?
解决方法
实际上你的重定向规则有两个问题:
- 它不会重定向着陆页(如您所见)
- 会导致重定向循环,因为
/foo.php
也将被重定向到/foo.php
,并且没有条件阻止该重定向。
您可以使用此重定向规则来处理这两个问题:
RewriteEngine On
RewriteRule !^foo\.php$ /foo.php [NC,L,R=307]
!^foo\.php$
是在 URI 已经是 /foo.php
时避免重定向的否定条件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。