Apache 2.4 ErrorDocument для нескольких поддоменов

мы ведем большой проект для разных клиентов, у каждого свой поддомен. Apache не должен выполнять какие-либо сценарии, если используется недопустимый поддомен. Вместо этого должна отображаться страница с ошибкой.

Рабочий :

это out zzz-default.conf, который является последним VHOST и соответствует всем запросам, которые не перехватываются другим VHOST.

<VirtualHost *:80>
        ServerName project.example.com
        ServerAlias *.project.example.com
        Redirect 404 /
        DocumentRoot /var/www/html/
        ErrorDocument 404 "This Subdomain does not exist."
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Что не работает:

ErrorDocument 404 /404.html

Этот файл находится в / var / www / html / и содержит чистый HTML, без скриптов.

Наша проблема, похоже, в правило перенаправления, но нам нужно, чтобы оно соответствовало всем поддоменам и перезаписывалось на / .

Если я включаю это и вызываю недопустимый поддомен, я получаю

Not Found

Запрошенный URL / не был найден на этом сервере.

Кроме того, была обнаружена ошибка 404 Not Found , в то время как пытаясь используйте ErrorDocument для обработки запроса .

Кто-нибудь знает почему?

Изменить : Другие VHOST определены как

<VirtualHost *:80>
    ServerName client.project.example.com
    Header always append X-Frame-Options SAMEORIGIN
</VirtualHost>

Include /path/to/local/client/httpd-vufind.conf

. ​​Существует 13 VHOST, определенных таким образом, а затем загружается вышеуказанный zzz-default.conf .

0
задан 9 May 2016 в 13:50
2 ответа

Асуудал нь бүх зүйлтэй тохирч байгаа дахин чиглүүлэх дүрэм юм. , үүнд таны ErrorDocument. Шийдэл нь маш энгийн бөгөөд алсын URL-ийг ErrorDocument болгон тохируулах замаар 404 хариултанд дахин чиглүүлэлтийг оруулна уу:

<VirtualHost *:80>
        ServerName project.example.com
        ServerAlias *.project.example.com
        DocumentRoot /var/www/html/
        ErrorDocument 404 http://project.example.com/404.html
</VirtualHost>
0
ответ дан 24 November 2019 в 06:35

Решение:

<VirtualHost *:80>
    ServerName project.example.com
    ServerAlias *.project.example.com

    # CHANGED:
    # return 404 for all requests expect 404.html
    RedirectMatch 404 "^(/(?!404.html).*)"
    # use custom 404 error document
    ErrorDocument 404 /404.html

    DocumentRoot /var/www/html/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Проблема заключается в том, что «Перенаправление 404 /» предотвращает отображение самого 404.html (настроенного с помощью оператора ErrorDocument). На это указывает сообщение об ошибке: «Кроме того, при попытке использовать ErrorDocument для обработки запроса произошла ошибка 404 Not Found».

0
ответ дан 20 January 2020 в 08:07

Теги

Похожие вопросы