微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 .htaccess RewriteRule 不适用于根路径 / 但适用于所有其他文件和子目录?

如何解决为什么 .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随机字符以避免重定向缓存)

enter image description here

.htaccess 位于根目录中:

enter image description here

以下 URL 也被重定向

http://192.168.178.9:8666/index.php?randomchars

所以这仅对“/”路径有效。可能是什么原因?

解决方法

实际上你的重定向规则有两个问题:

  1. 它不会重定向着陆页(如您所见)
  2. 会导致重定向循环,因为 /foo.php 也将被重定向到 /foo.php,并且没有条件阻止该重定向。

您可以使用此重定向规则来处理这两个问题:

RewriteEngine On

RewriteRule !^foo\.php$ /foo.php [NC,L,R=307]

!^foo\.php$ 是在 URI 已经是 /foo.php 时避免重定向的否定条件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。