Apache 为什么.htaccess重写规则在根路径/中不起作用,而在所有其他文件和子目录中起作用?
我正在使用并用以下代码替换原始的.htaccess文件,以测试重定向所有请求:Apache 为什么.htaccess重写规则在根路径/中不起作用,而在所有其他文件和子目录中起作用?,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我正在使用并用以下代码替换原始的.htaccess文件,以测试重定向所有请求: DirectoryIndex index.php index.html Options +FollowSymLinks -MultiViews -Indexes <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule . /foo\.php [L,R=307] </IfModule> DirectoryIndex
DirectoryIndex index.php index.html
Options +FollowSymLinks -MultiViews -Indexes
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule . /foo\.php [L,R=307]
</IfModule>
DirectoryIndex.php index.html
选项+后续符号链接-多视图-索引
重新启动发动机
重写基/
重写规则/foo\.php[L,R=307]
每个访问都被重定向,但根目录除外,我按如下方式打开了它:
(随机字符以避免重定向缓存)
.htaccess位于根目录中:
以下URL也被重定向:
因此,这仅对“/”路径有效。原因可能是什么?实际上,重定向规则有两个问题:
/foo.php
也将被重定向到/foo.php
,并且没有条件停止该重定向重新编写引擎打开
重写规则^foo\.php$/foo.php[NC,L,R=307]
^如果URI已经是/foo.php
/
或者htaccess所在的目录被视为空URI,则foo\.php$
为否定条件以避免重定向。您需要使用^$
来匹配根目录。在您的情况下,如果您在模式中使用*
而不是
,或者使用^
而不是
来匹配所有内容(包括空)将测试并返回反馈。否定在我的最终代码中不起作用,但是RewriteCond%{REQUEST\u URI}^/foo\.php$RewriteRule.*/foo\.php[L,R=307]
有效。