使用查询字符串进行重定向

使用查询字符串进行重定向

我有一个非常烦人的重定向,我无法弄清楚。

我有数百个如下所示的页面:

example.com/directory/in.php?url_id=28930

我想重定向所有例如/directory/in.php?url_id=28930

重定向全部都会转到主页。

您可以建议什么重定向规则?

我已经尝试了许多重定向规则但由于某种原因都失败了。

答案1

要检查特定的查询字符串,您需要使用 mod_rewrite 和一个RewriteCond针对QUERY_STRING服务器变量进行检查的指令。(该RewriteRule模式仅与 URL 路径匹配,这显然不包括查询字符串。)

例如,要重定向/directory/in.php?url_id=28930.htaccess文件中的特定 URL,您可以执行以下操作:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^url_id=28930$
RewriteRule ^directory/in\.php$ / [QSD,R=302,L]

QSD标志(查询字符串丢弃 - 仅限 Apache 2.4+)从重定向 URL 中删除查询字符串。如果您使用的是 Apache 2.2,则需要?代换字符串,即/?,以便有效地从重定向 URL 中删除查询字符串。否则,默认情况下,请求中的查询字符串将传递到目标 URL(即替代争论)。

还请注意,这是一个临时的 302 重定向。如果要将其设为永久重定向,则只有当您确定它正常工作时才将其更改302为(以避免任何缓存问题)。301

为了使其更加通用并重定向任何包含数字url_id参数值的 URL,请将RewriteCond指令更改为类似以下内容:

RewriteCond %{QUERY_STRING} ^url_id=\d+$

在旁边:从 SEO 的角度来看,像这样到主页的大规模重定向很可能会被 Google 和其他搜索引擎视为软 404。

相关内容