问题描述
我正在使用 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
时避免重定向的否定条件。