Apache-重写规则混乱

Apache-重写规则混乱,apache,mod-rewrite,http-status-code-301,Apache,Mod Rewrite,Http Status Code 301,为什么第一个重定向301没有进入主页?当我把它换成 Redirect 301 /resort.php/FOO/BAR http://www.sitename.com.com/index.php RewriteRule ^/direct/(.*) /direct/$1 [QSA,L] # access non i18n files directly RewriteRule ^/([a-z]{2}\/.*) /$1 [QSA,L] #any language subdirectory

为什么第一个重定向301没有进入主页?当我把它换成

Redirect 301 /resort.php/FOO/BAR http://www.sitename.com.com/index.php
RewriteRule ^/direct/(.*) /direct/$1 [QSA,L] # access non i18n files directly
RewriteRule ^/([a-z]{2}\/.*)        /$1 [QSA,L] #any language subdirectory should be left alone
RewriteRule ^/(.*\/$)               /en/$1index.php [QSA,L] #fix for links ending in /
RewriteRule ^/(.*\.php)             /en/$1 [QSA,L]  #any php file with no language subdirectory redirects to the default language
它开始工作了。我确信这是因为我有一大堆规则,它会跳到一个又跳到另一个,但我有点迷路了,也许一位大师可以更清楚地解释这一点

我的目录结构如下:

RewriteRule ^/resort.php(.*) http://www.sitename.com/index.php [R=301,L]
根目录中没有/index.php,我最初将其重定向到en

/en/index.php
/direct/

您的规则不会跳转,事实上,L标志表示最后一条规则,因此当触发其中一条规则时,文件将停止读取。

重定向指令正在与mod_rewrite展开激烈的斗争。后者非常具有攻击性,可能是对
redirect
指令在响应上设置的重定向HTTP头进行了过度写入


您已经找到了解决方案-使用
重写规则
执行重定向。[L]标志表示“最后一条规则-不再处理”,这是防止规则相互干扰的方法。普通的
重定向
指令只是实现
重写规则
更简单功能的一种简单方法,啊,我知道这是某种冲突。
RewriteRule /resort.php/FOO/BAR http://www.sitename.com.com/index.php [R=P, L]