如何为com_k2链接设置410 Gone?WordPress .htaccess规则冲突问题
解决WordPress覆盖自定义410规则的问题
我明白你遇到的困扰——好不容易写了返回410状态码的规则,结果被WordPress自动生成的.htaccess规则给覆盖了,完全不生效。别着急,咱们一步步来搞定这个问题:
为什么规则会被覆盖?
WordPress的默认rewrite规则(就是# BEGIN WordPress到# END WordPress之间的内容)会把几乎所有请求都重写到index.php来处理。如果你的自定义规则没有在WordPress规则之前正确匹配并终止后续处理,请求就会被WordPress的规则接管,你的410设置自然就失效了。
调整你的规则
首先,咱们先优化一下规则逻辑。如果你的需求是所有包含com_k2查询参数的链接都返回410,不管是HTTP还是HTTPS、不管是www还是非www域名,你可以把规则简化成这样:
RewriteEngine On RewriteCond %{QUERY_STRING} com_k2 [NC] RewriteRule ^ - [G,L]
如果确实需要限制只针对HTTPS的www域名,那保留你原来的条件也可以,但要确保条件没有漏掉你实际使用的访问场景。
放置规则的正确位置
关键来了:把这个规则放在# BEGIN WordPress的上方,也就是整个.htaccess文件的靠前位置。这样mod_rewrite会先处理你的自定义规则,一旦匹配到符合条件的请求,L标志会让它停止执行后续的WordPress规则,直接返回410状态码。
举个例子,你的.htaccess结构应该是这样:
# 自定义410规则 RewriteEngine On RewriteCond %{QUERY_STRING} com_k2 [NC] RewriteRule ^ - [G,L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
测试和注意事项
- 保存修改后,访问一个带有
?com_k2参数的链接,比如https://www.mypage.com/?com_k2=xxx,用浏览器开发者工具或者在线状态码检测工具确认是否返回410。 - 修改.htaccess前一定要备份原文件,万一写错规则导致网站无法访问,还能快速恢复。
- 如果你的com_k2链接是路径中包含
com_k2(比如https://www.mypage.com/com_k2/xxx),而不是查询参数,那需要把规则改成:
RewriteRule ^com_k2/ - [G,L]
内容的提问来源于stack exchange,提问作者Mitzayapa
相关产品推荐
相关产品推荐

