Apache httpd ErrorDocument 指令不起作用

Apache httpd ErrorDocument 指令不起作用

我在一台 RHEL 8 机器上,使用 Apache httpd 显示多个 vHost。当返回错误代码 503 时,我想将所有请求重定向到维护页面。

我的 vHost 配置如下:

<VirtualHost *:80>
    ServerName example.de 
    DocumentRoot "/var/www/html/gis"

    RewriteEngine  on
    Redirect permanent ^/$          https://example.de/intelliform/ui/cases/-/gis/index#/
    Redirect permanent index.html   https://example.de/intelliform/ui/cases/-/gis/index#/

    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port  "443"


    # Konfiguration für mod_proxy
    ProxyPreserveHost On
    ProxyPass /intelliform balancer://lb/intelliform
    ProxyPassReverse /intelliform balancer://lb/intelliform
    # Muss mindestens so groß sein wie LimitRequestFieldSize in intelliform.conf
    ProxyIOBufferSize 16384
    # ProxyTimeout erhöhen, z.B. relevant beim Publizieren von Themes
    #ProxyTimeout 360

    # Konfiguration für mod_jk
    # HTTPS-Anfragen die im Pfad-Anteil mit "/intelliform/" anfangen ueber den Worker "intelliform" verarbeiten
    #JkMount /intelliform/* intelliform

    # Error Page
    ErrorDocument 503 /maintenance.html    

    # Maintenance Page
    # Redirect all request to a 503 return code when in maintenance mode
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteCond /var/www/maintenance/ALL -f
    RewriteCond /var/www/maintenance/%{SERVER_NAME} -f
    RewriteRule %{REQUEST_URI} !=/maintenance.html
    RewriteRule ^ -  [R=503,L]

    # Optional: Fehlerseiten durch eigene Fehlerseiten ersetzen lassen
    # Ab mod_jk 1.2.27 koennen Fehlerseiten die vom intelliForm Server kommen durch eigene Fehlerseiten ersetzt werden.
    # http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html
    
    #ErrorDocument 403 http://www.my-server.example/forbidden.htm
    ErrorDocument 404 /404.htm

    # SSL Config
    # SSL unter Linux
    #SSLEngine on
    #SSLCertificateFile /etc/ssl/certs/serverzertifikat.crt
    #SSLCertificateKeyFile /etc/ssl/certs/meinschluessel.key
    #SSLCACertificateFile /etc/ssl/certs/intermediate-bundle.crt

            <LocationMatch "/+intelliform/admin.*">
                # ohne Beschraenkung verboten
                Require all denied
            </LocationMatch>

            # Zugriff auf intelliform
            <LocationMatch "/+intelliform/+(applications|calendar|data|dwr|filechooser|j_security_check|javascripts|js|properties|autovue|rest|managers/statistic).*|/+intelliform/+[-\w]+\.(css|js|png|gif).*">
                # ohne Beschraenkung erlauben
                Require all granted
            </LocationMatch>

    <Location /services>
                # ohne Beschraenkung verboten
                Require all denied
    </Location>

    <Location /auth>
                ProxyPass http://127.0.0.1:8180/auth
                ProxyPassReverse http://127.0.0.1:8180/auth
                RequestHeader set X-Forwarded-Proto "https"
                RequestHeader set X-Forwarded-Port  "443"
    </Location>
    
    <Location ~ "^/auth(/admin|/*$)">
                Require all granted
    </Location>

    # Logging unter Linux
    # Erstellen Sie mit mit dem Befehl ln -s einen symbolischen Link namens logs im Verzeichnis Ihrer Webserver Installation
    # welche nach /var/log/.. verweist.
    ErrorLog /var/log/httpd/intelliform-error-gis.log
    LogLevel debug
    CustomLog /var/log/httpd/intelliform-access-gis.log combined
    # Kombinierte Log-Datei
   LogFormat "\"%{cache-status}e\" %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" cache_combined
    CustomLog /var/log/httpd/cache-gis.log cache_combined
    #ForensicLog /var/log/httpd/forensic.log

 
</VirtualHost>

当文件 ALL oder %{SERVER_NAME} 存在时,这应该将所有请求重定向到错误 503 代码。我的 ErrorDocument 位于 /var/www/html/gis/maintenance.html,因此是根文档。

相反,我总是收到错误 503 服务不可用,并且我的维护页面没有显示。当我调用https://example.com/maintenance.html然后我的维护页面就会显示出来。

我该如何修复此问题?

我尝试注释掉 RewriteConds 并简单地重定向到错误 503 来检查是否是配置问题:

# Maintenance Page
# Redirect all request to a 503 return code when in maintenance mode
#RewriteCond %{ENV:REDIRECT_STATUS} ^$
#RewriteCond /var/www/maintenance/ALL -f
#RewriteCond /var/www/maintenance/%{SERVER_NAME} -f
#RewriteRule %{REQUEST_URI} !=/maintenance.html
RewriteRule ^ -  [R=503,L]

不幸的是,我仍然收到服务不可用的网站

相关内容