重定向至刚刚重写的 URL

重定向至刚刚重写的 URL

我有这个示例规则:

RewriteRule ^stories\/([0-9]+)\/(.*)+ stories/index.cfm?id=$1

而且效果非常好。

现在,我将一个页面(刚刚重写)重定向到另一个页面:

Redirect 301 /stories/2000/title-of-stories http://host/stories/2001/another-stories

但 apache 重定向到

http://host/stories/2001/another-stories?id=2000

将查询字符串“?id=2000”附加到 url

我怎样才能删除它?

非常感谢!

答案1

您的问题是,RewriteRule 在重定向之后被应用。

最佳实践是不要混合 mod_rewrite (RewriteRule) 和 mod_alias (Redirect) 中的指令。它们的应用顺序不是基于您编写规则的顺序,而是基于模块加载的顺序。

在这种情况下,用等效的 RewriteRule 替换 Redirect 301 指令将是最佳选择。我还没有测试过,但类似这样的方法可能对你有用。请注意,你应该把最具体的规则放在第一位:

重写规则 ^/stories/2000/title-of-stories$ /stories/2001/another-stories [L,R=301]
重写规则 ^/stories/([0-9]+)/(.*)+ /stories/index.cfm?id=$1 [L]

相关内容