мы ведем большой проект для разных клиентов, у каждого свой поддомен. 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
.
Асуудал нь бүх зүйлтэй тохирч байгаа дахин чиглүүлэх дүрэм юм. , үүнд таны 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>
Решение:
<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».