Apache-2.4

如何將所有萬用字元子域重定向到特定子域?執行 nextcloud 伺服器的子域存在問題

  • August 31, 2017

我希望將不存在的萬用字元子域(例如x.example.comy.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.confNextcloud 配置將首先載入並因此與 nextcloud.example.com 匹配,而其他域則與404.conf稍後載入的域匹配。

引用自:https://serverfault.com/questions/871339