如何用.htaccess的Redirect 301实现精确跳转并移除?amp参数
移除AMP参数的301重定向解决方案
你之前用Redirect 301指令跳转时,参数?amp会被保留,原因是Redirect是基于路径匹配的重定向规则,默认会把原URL的查询参数自动附加到目标URL末尾。要实现跳转时移除该参数,需要使用更灵活的URL重写规则,以下分环境给出具体方案:
Apache环境(使用mod_rewrite)
在网站根目录的.htaccess文件中添加以下规则:
针对特定页面(/contact.php)
RewriteEngine On # 匹配仅带?amp参数的/contact.php页面 RewriteCond %{QUERY_STRING} ^amp$ RewriteRule ^contact\.php$ /contact.php? [R=301,L]
RewriteCond用于筛选查询字符串恰好为amp的请求- 目标URL末尾的
?是关键,它会告诉Apache不要传递原查询参数,从而实现参数移除 R=301表示永久重定向,L表示这是最后一条规则
通用规则(移除所有页面的amp参数)
如果需要处理所有带amp参数的URL,可使用:
RewriteEngine On RewriteCond %{QUERY_STRING} (^|&)amp($|&) RewriteRule ^(.*)$ /$1? [R=301,L]
该规则会匹配任何包含amp参数的请求,无论参数在查询串中的位置,跳转后移除所有查询参数。
Nginx环境
在Nginx配置文件中添加对应规则:
针对特定页面
location = /contact.php { if ($args ~* "^amp$") { return 301 https://example.com/contact.php; } }
通用规则
if ($args ~* "(^|&)amp($|&)") { set $args ""; return 301 $scheme://$host$uri; }
注意:修改配置后需要重启Web服务器使规则生效,并且测试时请清除浏览器缓存(301重定向会被浏览器缓存)。
内容的提问来源于stack exchange,提问作者Kevin Klimack
相关产品推荐
相关产品推荐

