301重定向,与RewriteRule冲突

时间:2012-10-10 17:01:41

标签: apache .htaccess mod-rewrite redirect

我们今天进行了一些维护,并将我们的网络论坛从/ forums移到了域的根文件夹中。

我们在.htaccess文件中添加了重定向301:

Redirect 301 /forums/ http://www.ourforums.com/

但是,我们曾经有一些包含重复/论坛文件夹的链接。即www.ourforums.com/forums/forums/forum.1

显然,从上面重定向现在导致/forum.1,其中不存在odes。我希望旧链接实际上指向www.ourforums.com/boards/forum.1。我试图使用类似的东西:

RewriteRule ^/forums/forums http://www.ourforums.com/boards/ [NC,R=301,L]

无论我尝试了什么,Redirect似乎都取代了我放在同一个文件中的任何RewriteRules,无论我是否将它们放在Redirect之前。

有什么方法可以确保在重定向之前处理RewriteRule?

3 个答案:

答案 0 :(得分:2)

这是因为mod_alias(Redirect指令)和mod_rewrite(RewriteRule指令)在您的情况下相互冲突。它们都在URL文件映射处理管道中发挥作用,其中URI被处理,重写,标记,并最终映射到资源和响应。您有一个Redirect规则正在应用,并且响应被标记为重定向。关于Redirect指令的事情是它将2个路径节点连接在一起,这意味着:

/forums/

已连接到

http://www.ourforums.com/

因此,/forums文件夹下的任何内容最终都会被重定向。这就是为什么它正在捕捉^/forums/forums

您可以坚持使用mod_rewrite或使用排除RedirectMatch的{​​{1}}:

/forums/forums

RewriteRule ^/forums/forums(.*)$ http://www.ourforums.com/boards$1 [NC,R=301,L]
RewriteRule ^/forums/(.*)$ http://www.ourforums.com/$1 [NC,R=301,L]

答案 1 :(得分:0)

手动添加像这样的重定向语句似乎对我有用:

Redirect /forums/forums/forum.1 http://www.ourforums.com/boards/forum.1

答案 2 :(得分:0)

我有一个类似的问题。我试图从cpanel添加重定向,而我已经在我的.htaccess文件中写了一些重写规则。我得到的错误是""没有加工标签。我最终做的是保留了我现有规则的副本并清理了.htaccess。然后去添加了我需要的所有重定向,从cpanel,然后最后在文件的末尾放回我自己的重写规则。这对我有用