如何htaccess 301重定向网址中带有问号的网页

时间:2015-05-28 16:16:11

标签: html regex apache .htaccess mod-rewrite

我试图重定向几个在网址上都有问号的网页。

我基本上想要重定向:

www.example.com/?attachment_id=456 to www.example.com

还有大量的页面,其中包含不同的ID#。

我在htaccess尝试了一些没有运气的东西..

有什么想法吗?

这就是我的尝试:

RewriteCond %{QUERY_STRING} ^attachment_id=[0-9]
RewriteRule ^/$ http://www.example.com/? [L,NC,R=301]

2 个答案:

答案 0 :(得分:5)

为什么你不能这样做?此代码应重定向此www.example.com/?attachment_id=456

之类的网址
RewriteCond %{QUERY_STRING} ^attachment_id=[0-9]+
RewriteRule ^/?$ http://www.example.com/? [L,NC,R=301]

我使/可选,以便可以在Apache配置或.htaccess中使用。另外,我在RewriteRule末尾的重定向中保留了?,以删除重定向上的任何查询字符串。

答案 1 :(得分:4)

你的方法是完美的,只是一些小的修正:

RewriteEngine on
RewriteCond %{QUERY_STRING} attachment_id=[0-9]+
RewriteRule ^/$ http://www.example.com/ [L,R=301]

以上是主机配置的版本。请注意,必须在更改主机配置后重新启动http服务器才能使其生效。要调试,请参阅http服务器错误日志文件,尤其是在重新启动时。

如果您必须依赖.htaccess样式文件,那么不幸的是,规则本身的语法会略有不同:

RewriteEngine on
RewriteCond %{QUERY_STRING} attachment_id=[0-9]+
RewriteRule ^$ http://www.example.com/ [L,R=301]

此类文件必须位于主机文档根目录的主文件夹中。此外,必须通过AllowOverride选项在主机配置中启用此类文件的解释。

通常,总是更喜欢.htaccess样式文件上的此类规则的主机配置,但您需要具有管理访问权限。 .htaccess样式文件非常容易出错,难以调试并且确实会降低服务器速度。