【问题标题】:Rewrite rule for "site down" pages重写“站点关闭”页面的规则
【发布时间】:2009-08-26 22:14:37
【问题描述】:

我试图安装此 .htaccess 以通知我的用户进行站点维护。似乎第一个 [L] 不起作用,第二个重写正在做所有事情。

你们如何做网站维护消息?

RewriteEngine on

RewriteRule ^s/down$ index.html [L]
RewriteRule ^(.*)$ http://metaward.com/s/down [R=302,L]

【问题讨论】:

    标签: apache mod-rewrite maintenance


    【解决方案1】:

    您不需要外部重定向。只需发送503 status code 和您的错误文档即可。

    RewriteCond %{ENV:REDIRECT_STATUS} !=503
    RewriteRule ^(.*)$ /503.html [R=503,L]
    ErrorDocument 503 /503.html
    

    但是您需要 Apache 2.x 使用带有 R 标志而不是 3xx 的不同状态代码。

    【讨论】:

    • 503 实际上不会导致浏览器重定向。
    • @Paul Tarjan:我从来没有这么说过。 Apache 2 只是扩展了R 标志的使用来设置状态码。只有 3xx 状态码实际上会导致外部重定向。
    • 设置 [R=503] 显示默认的 apache 页面,而不是我在 RewriteRule 中指定的页面。这是预期的反应吗?
    • 将“ErrorDocument 503 /down/index.html”添加到设施自定义 503 消息中。添加“别名/down /var/somewere/down”分享消息页
    • ErrorDocument,而不是 RewriteDocument
    【解决方案2】:

    这似乎可行(但我必须在 PHP 中设置状态码)

    RewriteEngine on
    
    RewriteCond %{REQUEST_URI} !^/static/.*$
    RewriteCond %{REQUEST_URI} !^/media/.*$
    RewriteRule .* down.php [L]
    

    在down.php中

    <?php
    header('HTTP/1.1 503 Service Temporarily Unavailable',true,503);
    ?>
    

    这有什么问题吗?我主要关心的是用户看到的内容(这就是我保留静态内容的原因)和搜索引擎看到的内容(503 状态代码)。

    【讨论】:

    • 这是我决定的,但不需要RewriteConds。在这种情况下,RewriteRule !^/(?:static|media)/ down.php [L] 可以。
    【解决方案3】:

    当我想关闭网站进行维护时,我在网站上使用的 RewriteRules 如下:

    RewriteCond %{REMOTE_ADDR} !=MY_IP_ADDRESS
    RewriteRule    ^$  /down.html  [L]
    RewriteCond %{REMOTE_ADDR} !=MY_IP_ADDRESS
    RewriteRule    [^/down.html$]  /down.html  [L]
    

    (也许不是很“优化”,我应该说......但每次我使用它们时它都有效(或者看起来如此))

    除了 down.html 之外的所有内容都被重定向到 down.html —— 当然,除了我:我希望能够测试我正在做的维护操作,很明显

    当我完成后,我只评论这四行。

    【讨论】:

    • IP地址条件:整洁。
    • 这不会让搜索引擎将您的页面编入索引,就好像它完全正常,但正在为您奇怪的向下页面提供服务?
    • @Paul:我不得不承认我不确定;我已将 作为安全措施放入 down.html,但我不确定机器人会做什么:我从未见过我的内容谷歌上的 down.html 页面,这是肯定的,我从来没有注意到其他页面有任何“坏”;;但是我的维护操作很少,从来没有超过3个小时;;而且我的网站不是很大/很有名,所以没有经常被索引......;;尽管如此,如果有人看到了一种让这变得更好的方法,我肯定会感兴趣(很高兴提供一个答案,并自己得到一个!);-)
    • 您应该将 [R=503] 状态添加到 RewriteRule 以表示临时维护条件。
    • @MartijnHeemels:[R=503] 在我的 Apache 上不起作用,因为它需要 ErrorDocument 503 指令。使用ErrorDocument,Apache 的行为与上面的建议略有不同,将用户重定向到down.html,而不是只针对任何请求显示 down.html。
    【解决方案4】:

    我使用 Apache 作为 ruby​​ on rails 应用程序的代理。

    我唯一要做的就是添加

    ProxyPass /custom-errors !
    ErrorDocument 503 /custom-errors/maintenance-message.html
    

    到我的 httpd.conf 并确保:[Apache 安装]/htdocs/custom-errors/maintenance-message.html 存在。

    【讨论】:

      【解决方案5】:

      我没有看到有人使用 Retry-After 标头。我已经读过(但我之前读过它时不再有链接了)你应该使用 503 和 Retry-After n 的组合(n = 重试的秒数;3600 是一个小时) 标题。如果您在组合中使用 503 和 Retry-After,尤其是在您的 robots.txt/sitemap 上,如果您长时间不这样做,它不应该与 SEO 的链接和页面排名混淆。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-01
        • 1970-01-01
        • 2013-12-20
        • 1970-01-01
        • 2011-03-30
        • 2012-10-02
        • 1970-01-01
        相关资源
        最近更新 更多