为什么 .htaccess RewriteRule 在根路径中不起作用,但对所有其他文件和子目录起作用?
Why does .htaccess RewriteRule not work in root path / but with for all other files and subdirs?
我正在使用 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]
如果 URI 已经是 /foo.php
.,!^foo\.php$
是避免重定向的否定条件
我正在使用 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]
如果 URI 已经是 /foo.php
.,!^foo\.php$
是避免重定向的否定条件