Apache-2.4
如何將所有萬用字元子域重定向到特定子域?執行 nextcloud 伺服器的子域存在問題
我希望將不存在的萬用字元子域(例如
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 網路伺服器按字母順序讀取虛擬主機配置文件。這意味著在
404.conf
文件之前讀取nc.conf
文件。因此,主機首先與ServerAlias *.example.com
指令匹配,此匹配項和其他虛擬主機被忽略。通過將nc.conf
文件重命名為00_nc.conf
Nextcloud 配置將首先載入並因此與 nextcloud.example.com 匹配,而其他域則與404.conf
稍後載入的域匹配。