Мне нужны поддомены с подстановочными знаками, которых не существует, например x.example.com
, y.example.com
и т. д., чтобы перенаправить на 404.example.com
.
Я использую Apache 2.4. Как я могу это сделать?
Что пробовал:
Мой 404.conf:
<VirtualHost *:80>
ServerName 404.example.com
ServerAlias *.example.com
ServerAdmin webmaster@localhost
DocumentRoot "/var/web/404"
ErrorLog ${APACHE_LOG_DIR}/404-error.log
CustomLog ${APACHE_LOG_DIR}/404-access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName 404.example.com
ServerAlias *.example.com
ServerAdmin webmaster@localhost
DocumentRoot "/var/web/404"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /fullchain.pem
SSLCertificateKeyFile /privkey.pem
</VirtualHost>
<Directory "/var/web/404">
Options FollowSymlinks ExecCGI
AllowOverride None
Require all granted
</Directory>
Это действительно сработало. 123l4k.example.com
перенаправляется на 404.example.com
. Но поддомен nextcloud, nc.example.com
, также перенаправляет на 404.example.com
. Остальные поддомены работают нормально.
Мне нужно отключить виртуальный хост 404.conf
чтобы иметь доступ к субдомену nextcloud.
Мой nc.conf:
Alias /nextcloud /var/web/nextcloud/
<VirtualHost *:80>
ServerName nc.example.com
ServerAlias nextcloud.example.com
DocumentRoot "/var/web/nextcloud/"
RedirectPermanent / https://nc.example.com
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
#RewriteLog "/var/log/apache2/nextcloud_rewrite.log"
</VirtualHost>
<VirtualHost *:443>
ServerName nc.example.com
ServerAlias nextcloud.example.com
DocumentRoot "/var/web/nextcloud/"
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
SSLCertificateFile /fullchain.pem
SSLCertificateKeyFile /privkey.pem
</VirtualHost>
<Directory "/var/web/nextcloud/">
Options +FollowSymlinks +ExecCGI
AllowOverride None
Require all granted
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME "/var/web/nextcloud"
SetEnv HTTP_HOME "/var/web/nextcloud"
</Directory>
<Directory "/var/web/nextcloud/data/">
Require local
</Directory>
Как я могу сохранить поведение доменов с подстановочными знаками, перенаправляющих на 404.example.com
и получить доступ к моему серверу nextcloud на nc.example.com
?
Веб-сервер Apache читает файлы конфигурации vhost в алфавитном порядке. Это означает, что 404.conf
файлы читаются до nc.conf
файл. Таким образом, хост сначала сопоставляется с ServerAlias *.example.com
директива, это соответствует, а другие vhosts игнорируются. Переименовав nc.conf
файл в 00_nc.conf
конфигурация Nextcloud будет загружена первой и, таким образом, будет сопоставлена с nextcloud.example.com, а другой домен сопоставлен с 404.conf
который загружается позже.