我想要将不存在的通配符子域名(如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
?
答案1
Apache Web 服务器按字母顺序读取 vhost 配置文件。这意味着文件在文件404.conf
之前被读取nc.conf
。因此,主机首先与ServerAlias *.example.com
指令匹配,匹配成功,其他 vhost 将被忽略。通过将nc.conf
文件重命名为00_nc.conf
Nextcloud 配置将首先加载,从而与 nextcloud.example.com 匹配,然后与其他域匹配,404.conf
稍后加载。