You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.htaccess中配置RewriteRule使?p=类URL返回410 Gone失败,问题在哪?

为什么针对?p=773这类URL的410 Rewrite规则不生效?

我之前在另一框架下运营网站,部分形如?p=773的URL已被搜索引擎收录。我希望让这类URL返回410 Gone状态码,尝试了以下规则但未生效:

RewriteRule ^(\?p=773)$ - [G,L]

RewriteRule ^(.*p=.*)$ - [G,L]

请问我遗漏了什么?


核心原因:RewriteRule不匹配查询字符串

Apache的RewriteRule默认仅匹配URL的路径部分(即域名后、?之前的内容),不会包含?开头的查询字符串。你写的规则试图在路径中匹配?p=xxx,但实际这些内容属于查询字符串,所以规则完全无法命中目标请求。

正确的规则写法

要匹配查询字符串,必须用RewriteCond捕获查询参数,再结合RewriteRule返回410状态码:

  1. 针对单个特定URL(如?p=773)
RewriteCond %{QUERY_STRING} ^p=773$
RewriteRule ^ - [G,L]
  • %{QUERY_STRING}是Apache内置服务器变量,专门存储URL中的查询字符串内容。
  • RewriteRule ^ -表示匹配任意路径,配合前面的条件,只要查询字符串严格等于p=773,就返回410。
  1. 匹配所有包含p=的查询字符串
RewriteCond %{QUERY_STRING} p=
RewriteRule ^ - [G,L]

这个规则会命中所有查询字符串中带有p=的请求,不管后续参数值是什么。

额外注意事项

  • 确保这些规则放在.htaccess文件的最顶部(或其他Rewrite规则之前),避免被其他规则提前拦截处理。
  • 测试时可使用curl命令验证状态码:
curl -I "http://你的域名/?p=773"

查看输出中是否包含HTTP/1.1 410 Gone。


内容的提问来源于stack exchange,提问作者Ehsan88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:05:15