Apache别名/重写重定向循环

时间:2012-10-09 17:42:41

标签: apache mod-rewrite redirect alias infinite-loop

我想使用mod_rewrite为我的apache使用一些别名,因为别名不适用于.htaccess

例如,我希望article/?id=1的别名为about/

当然,这是一件简单的事情:

RewriteRule ^about\/$ "article\/\?id=1" [L]

但是,与此同时,我不希望任何人再次访问article/?id=1,并将301重定向到about/以保留页面值和果汁。 (因为否则搜索引擎会认为它是两个不同的页面,并会根据自己的判断来判断它。)

所以换句话说,我希望这个url只能通过它的别名来提供,如果有人请求实际的页面 - 那么301会重定向到别名。

这就是问题开始的地方,因为我写了另一个重写规则,我最终得到错误310(重定向循环):

RewriteRule ^article\/\?id=1$ "about\/" [L,R=301]

有没有办法解决这个问题......?

1 个答案:

答案 0 :(得分:0)

您需要匹配实际请求而不是URI,因为另一个规则只是在内部重写它并触发重定向,从而导致循环。此外,您无法与RewriteRule中的查询字符串进行匹配。

RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /article/\?id=1&?([^\ ]*)
RewriteRule ^ /about/?%2 [L,R=301]