0

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

我们在 .htaccess 文件中放入重定向 301:

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

但是,我们曾经有一些包含重复 /forums 文件夹的链接。即 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]

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

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

4

3 回答 3

2

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

/forums/

连接到

http://www.ourforums.com/

因此,文件夹下方的任何内容/forums最终也会被重定向。这就是它吸引人的原因^/forums/forums

您可以坚持使用 mod_rewrite 或使用RedirectMatch排除/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]

或者

RedirectMatch 301 ^/forums/(?!forums)(.*)$ http://www.ourforums.com/$1
于 2012-10-10T21:32:56.560 回答
0

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

Redirect /forums/forums/forum.1 http://www.ourforums.com/boards/forum.1
于 2012-10-11T13:17:33.440 回答
0

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

于 2017-03-23T14:28:13.467 回答