如何在.htaccess中为带P参数的URL设置301重定向?
解决.htaccess中移除?p=参数的301重定向问题
原规则无效原因
你当前的规则无法匹配目标URL,因为RewriteCond %{QUERY_STRING} ^p(&|$) [NC]要求查询字符串以p开头,后面紧跟&或结束,但实际你的参数是p=1028,正则无法匹配这种格式,导致规则不触发。
正确重定向规则
根据需求(移除.html后的所有参数,只要URL包含p=任意数字参数),使用以下规则:
RewriteEngine On # 匹配包含p=数字参数的查询字符串(支持单独参数或与其他参数共存) RewriteCond %{QUERY_STRING} (^|&)p=[0-9]+(&|$) [NC] # 重定向到不带查询字符串的当前URI,301永久重定向 RewriteRule ^ %{REQUEST_URI}? [R=301,L]
规则说明
RewriteEngine On:确保URL重写引擎处于开启状态(如果你的.htaccess中已有此行可省略)(^|&)p=[0-9]+(&|$):精准匹配独立的p=数字参数,避免误匹配类似ap=123的参数:(^|&):匹配查询字符串开头或参数分隔符&,确保p是独立参数p=[0-9]+:匹配p=后跟随任意长度的数字(&|$):匹配参数分隔符&或查询字符串结尾[NC]:忽略大小写,同时匹配p或P参数
%{REQUEST_URI}?:末尾的?会清空所有查询字符串,实现移除.html后所有内容的效果R=301:标记为永久重定向,利于搜索引擎收录;测试阶段可改用R=302临时重定向,避免浏览器缓存影响测试L:表示此规则为最后执行的规则,停止后续重写处理
简化版(仅当URL只有p=数字参数时)
如果你的场景中URL仅包含p=数字这一个参数,可使用更简洁的规则:
RewriteEngine On RewriteCond %{QUERY_STRING} ^p=[0-9]+$ [NC] RewriteRule ^ %{REQUEST_URI}? [R=301,L]
内容的提问来源于stack exchange,提问作者Jai
相关产品推荐
相关产品推荐

