我需要以久负盛名的SE_firendly方式从我的其中一个站点返回503状态代码以进行维护。我似乎无法弄清楚如何在不调用外部脚本的情况下做到这一点,我宁愿避免这种情况。
是否有一个apache指令,该指令将允许我返回任意的HTTP状态代码,而无需诉诸于调用设置状态标头的php脚本之类的黑客程序?
我需要以久负盛名的SE_firendly方式从我的其中一个站点返回503状态代码以进行维护。我似乎无法弄清楚如何在不调用外部脚本的情况下做到这一点,我宁愿避免这种情况。
是否有一个apache指令,该指令将允许我返回任意的HTTP状态代码,而无需诉诸于调用设置状态标头的php脚本之类的黑客程序?
Answers:
这将为每个请求提供一个静态保留页面以及503状态。
RedirectMatch 503 ^/(?!holding\.html)
ErrorDocument 503 /holding.html
Header always set Retry-After "18000"
RedirectMatch用于否定保存页面本身,否则将创建无限循环。
mod_header用于设置Retry-After标头,以便在此示例中您可以告诉Google /其他漫游器等在18000秒(5小时)后进行备份。您可以sudo ap2enmod header
激活mod_header(这是Header指令所必需的)。
RedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg)
。
尝试
Redirect 503 / /
从http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect:
通过将数字状态代码作为status的值,可以返回其他状态代码。如果状态在300到399之间,则必须存在URL参数,否则必须将其省略。请注意,Apache代码必须知道该状态(请参见http_protocol.c中的send_error_response函数)。
附加说明:这将显示503错误的默认/配置的ErrorDocument。
Redirect 503 /
似乎有效。
为了使您的维护模式更加灵活,请在存在特殊文件ala时设置503:
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/.maintenance -f
RewriteRule .* - [R=503]
注意:DOCUMENT_ROOT的位置在httpd 2.2和2.4之间可能有所不同
这样,您所需要做的就是“触摸/path/to/docroot/.maintenance”,您的站点将立即开始返回503。然后,使其变得纯净,创建一个自定义格式良好的html错误页面,并将其添加到正确的apache服务器的配置文件中:
ProxyErrorOverride on
ErrorDocument 503 /error/503.html
对于奖励积分,如果您有多个Web服务器,请在共享文件系统上放置.maintenance的位置,或者甚至获得更多奖励积分:
pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"
使维护模式文件为基础的优点是,它可以在您的应用程序不工作时起作用,它既快速又简单,并且前端缓存代理更易于处理,因为您可以一口气处理所有后端503。
资料来源: