配置Apache为特定URL返回410状态码问题求助
解决WordPress站点.htaccess中410规则不生效的问题
咱们来拆解下你遇到的问题:添加410规则后还是返回404,核心是规则的路径格式和顺序出了问题,咱们一步步调整就能解决:
1. 修正RewriteRule的路径格式
在.htaccess文件里,mod_rewrite的规则是相对当前目录的,你写的^/somepage\.asp$里开头的斜杠/是多余的,会导致规则匹配不到请求。正确写法要去掉开头的斜杠:
RewriteRule ^somepage\.asp$ - [G,NC]
[G]标志专门用来返回410 Gone状态码,[NC]是忽略大小写匹配,适配不同大小写的请求。
2. 调整规则的执行顺序
WordPress默认的重写规则会把所有不存在的文件/目录请求转发到index.php,如果你的410规则放在WP规则之后,请求会先被WP的规则捕获,进而返回404。所以必须把410规则放在RewriteEngine On之后、WP主规则之前。
完整的正确.htaccess配置示例
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 先放410规则,确保优先匹配 RewriteRule ^somepage\.asp$ - [G,NC] # 可以批量添加多个规则,比如旧分类页 # RewriteRule ^old-blog-category/.*$ - [G,NC] # WordPress默认重写规则(保持不动) RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
关于RedirectMatch的替代写法
如果你想用RedirectMatch实现同样效果,也要注意放在WP规则之前,写法如下:
RedirectMatch gone ^/somepage\.asp$
不过更推荐用mod_rewrite的RewriteRule [G],因为和WP的规则同属一个模块,不会出现模块优先级冲突的问题。
最后别忘了修改完.htaccess后,用浏览器无痕模式测试,避免缓存干扰结果~
内容的提问来源于stack exchange,提问作者Be Kind To New Users
相关产品推荐
相关产品推荐

