【问题标题】:mod_rewrite help needed for 410 status code410 状态码需要 mod_rewrite 帮助
【发布时间】:2011-10-31 01:23:45
【问题描述】:

如果 URL 上有任何?,我想发送 410 状态代码。因为该网站仅适用于启用了 SEO 的 URL(例如 www.domain.com/seo-enabled-urls)。

在 StatckOverflow 社区的支持下,这个 301 重定向完美运行:

RewriteBase /
RewriteRule ^romance-package-two\.html$ http://www.domain.com/wedding-champagne [QSA,NC,R=301,L]

以同样的方式,我想添加 410 消息代码,它将告诉 Google(如搜索引擎)永久删除,这样我们就不会遇到 SEO 未知或未找到 URL 的问题。

如果 URL 看起来像这样

www.domain.com/seo-enabled-urls?param1=val1&param2=val2

我想保留相同的 URL,但只使用这样的 410 代码

RewriteCond %{query_string} ^(.*&)?$ [NC]
RewriteRule ^1$  same url code [QSA,NC,R=410,L]

请帮帮我。

【问题讨论】:

    标签: .htaccess mod-rewrite seo http-status-code-410


    【解决方案1】:

    您不能使用 HTTP 410 代码进行重定向 - 410 表示所请求的页面已永久消失,并且无法替换:

    410 消失

    请求的资源在服务器上不再可用,并且不知道转发地址。预计这种情况将被视为永久性的。具有链接编辑能力的客户端应该在用户批准后删除对 Request-URI 的引用。如果服务器不知道或无法确定条件是否是永久的,则应该使用状态码 404(未找到)。除非另有说明,否则此响应是可缓存的。

    -- http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.11


    HTTP 301 的相应定义表明它已经完全符合您的要求:

    301 永久移动

    已为请求的资源分配了一个新的永久 URI,以后对该资源的任何引用都应该使用返回的 URI 之一。如果可能,具有链接编辑功能的客户端应该自动将对 Request-URI 的引用重新链接到服务器返回的一个或多个新引用。除非另有说明,否则此响应是可缓存的。

    -- http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2

    【讨论】:

    • 您好,那些(var=val&var2=val) 参数不再影响页面结果。这是错误的 URL 参数,我想从 google bot 索引中删除它。
    • 所以发送一个 301 重定向从原始 URL 到没有参数的 URL - 就像你在问题中提出的那样,但使​​用 R=301 而不是 R=410
    【解决方案2】:

    至少早在 Apache 2.0 中,接受的答案不再正确,其中 mod_rewrite 支持 410 GONE 目标:

    'gone|G'(强制 URL 消失) 这会强制当前 URL 消失 - 它立即发送回 410 (GONE) 的 HTTP 响应。使用此标志将不再存在的页面标记为已消失。

    (见http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule

    这意味着你上面的规则应该是:

    RewriteCond %{query_string} ^(.*&)?$ [NC]
    RewriteRule ^1$ - [G]
    

    【讨论】:

    • 示例不正确 - 必须包含“-”,例如:RewriteRule ^1$ - [G]