【问题标题】:Apache2 mod_rewrite to custom maintenance.html pageApache2 mod_rewrite 到自定义 maintenance.html 页面
【发布时间】:2023-01-18 04:49:26
【问题描述】:

我有以下情况。我在 /var/www 下有我的 webapp 文件夹“my_project”。现在我想使用 mod_rewrite 显示一个维护页面。

为此,我在 /var/www 下放置了文件“maintenance.html”。此外,我在 /etc/apache2/sites-available 下的“my_project”文件夹的配置文件中添加了以下重写条件,包括以下重写规则:

<VirtualHost *:80>
    ....

    RewriteEngine on
    RewriteCond /var/www/maintenance.html -f
    RewriteCond %{REQUEST_URI} !^/maintenance\.html$
    RewriteCond %{REMOTE_ADDR} !^00\.00\.00\.00
    RewriteRule (.*) /var/www/maintenance.html [R=503,L]

    #Alternative I tried:
    RewriteEngine on
    RewriteCond /var/www/maintenance.html -f
    RewriteCond %{REQUEST_URI} !^/maintenance\.html$
    RewriteCond %{REMOTE_ADDR} !^00\.00\.00\.00
    RewriteRule (.*) /maintenance.html [R=503,L]

    ...
</VirtualHost>

现在我收到消息“服务不可用。由于维护停机或容量问题,服务器暂时无法为您的请求提供服务。请稍后再试”,如果文件“maintenance.html”位于文件夹 /var/www 中。但是,我希望显示 maintenance.html 文件而不是上述消息。

谁能告诉我我在这里做错了什么或理解了什么?

【问题讨论】:

  • ““my_project”文件夹的配置文件中的以下重写规则” - 您如何定位 my_project 子目录?

标签: mod-rewrite apache2 maintenance-mode


【解决方案1】:
RewriteRule (.*) /maintenance.html [R=503,L]

在非 3xx 状态下使用 R 标志时,代换string 被忽略(在这种情况下,您最好包含一个连字符作为替换)。

在这种情况下,要服务/maintenance.html,您应该设置适当的ErrorDocument,并简单地使用RewriteRule指令中的R=503标志,通过内部子请求触发它。

例如

ErrorDocument 503 /maintenance.html

:
RewriteRule ^ - [R=503]

L 标志在指定非 3xx 状态时也是不必要的,因为它是隐含的。

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 1970-01-01
    • 2011-05-19
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2015-08-11
    相关资源
    最近更新 更多