Apache 2.2(在运行 cPanel 的服务器上)似乎忽略了返回 410 状态的指令。
这种情况发生在 mod_alias 的 Redirect (使用410
或gone
) 和 mod_rewrite 的 RewriteRule (使用[G]
) 中,在 .htaccess 文件内部使用。
这有效:
Redirect 302 /somewhere /gone
但事实并非如此:
Redirect 410 /somewhere
该行将被忽略(就像已被注释掉一样)并且请求将转到其他规则(将其引导至不相关的通用错误处理脚本)。
类似地,尝试使用带有 [G] 标志的 RewriteRule 不起作用,但将相同的规则重写到生成 410 的脚本中却起作用 - 因此规则不是问题,而似乎是 410/gone 出现问题。
我可以通过使用脚本发送 410 来解决这个问题,但这很烦人,而且我不明白为什么它不起作用。
有任何想法吗?
答案1
cPanel 中似乎有一个错误 - 它需要一个明确的 ErrorDocument 才能使 410 生效。
因此,解决方案是将以下内容添加到 .htaccess:
ErrorDocument 410 default
这样,[G] 便可以用于 RewriteRule。(尚未验证重定向是否也已修复。)
来源:http://wordpress.org/support/topic/410-errors-returning-404-pages
答案2
您说它不起作用是什么意思,返回的状态代码是什么?如果您正在使用任何第三方 apache 模块,请先尝试禁用它们。