dan*_*lay 30 http seo apache-2.2
我需要从我的一个站点以历史悠久的 SE_firendly 方式在维护期间返回 503 状态代码。如果不调用我宁愿避免的外部脚本,我似乎无法弄清楚如何做到这一点。
是否有一个 apache 指令可以让我返回任意的 HTTP 状态代码,而无需求助于调用设置状态标头的 php 脚本之类的黑客攻击?
小智 34
这为每个请求提供一个静态保持页面以及 503 状态。
RedirectMatch 503 ^/(?!holding\.html)
ErrorDocument 503 /holding.html
Header always set Retry-After "18000"
Run Code Online (Sandbox Code Playgroud)
RedirectMatch 用于否定保持页面本身,否则会创建无限循环。
mod_header 用于设置 Retry-After 标头,以便您可以在此示例中告诉 Google/其他机器人等您应该在 18000 秒(5 小时)后备份。您可以sudo ap2enmod header
激活 mod_header (这是 Header 指令所必需的)。
尝试
Redirect 503 / /
Run Code Online (Sandbox Code Playgroud)
来自http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect:
可以通过将数字状态代码作为状态值来返回其他状态代码。如果状态介于 300 和 399 之间,则 URL 参数必须存在,否则必须省略。请注意,Apache 代码必须知道状态(请参阅 http_protocol.c 中的函数 send_error_response)。
附加说明:这将显示 503 错误的默认/配置的 ErrorDocument。
为了让你的维护模式更加灵活,当特殊文件存在时设置503,ala:
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/.maintenance -f
RewriteRule .* - [R=503]
Run Code Online (Sandbox Code Playgroud)
注意:DOCUMENT_ROOT 的位置在 httpd 2.2 和 2.4 之间可能不同
这样,您所需要做的就是“touch /path/to/docroot/.maintenance”,您的网站将立即开始返回 503。然后为了让一切变得简单,创建一个自定义的格式良好的 html 错误页面并将其添加到正确的 apache 服务器的配置文件中:
ProxyErrorOverride on
ErrorDocument 503 /error/503.html
Run Code Online (Sandbox Code Playgroud)
如果您有多个 Web 服务器,则为了获得奖励积分,可以将 .maintenance 的位置放在共享文件系统上,或者获得更多奖励积分:
pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"
基于维护模式文件的优点是,当您的应用程序不工作时它可以工作,它快速而简单,并且前端缓存代理更容易处理,因为您可以一次性处理所有后端 503。
资料来源:
归档时间: |
|
查看次数: |
40963 次 |
最近记录: |