如何将所有通配符子域名重定向到特定子域名?运行 nextcloud 服务器的子域名出现问题

如何将所有通配符子域名重定向到特定子域名?运行 nextcloud 服务器的子域名出现问题

我想要将不存在的通配符子域名(如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

答案1

Apache Web 服务器按字母顺序读取 vhost 配置文件。这意味着文件在文件404.conf之前被读取nc.conf。因此,主机首先与ServerAlias *.example.com指令匹配,匹配成功,其他 vhost 将被忽略。通过将nc.conf文件重命名为00_nc.confNextcloud 配置将首先加载,从而与 nextcloud.example.com 匹配,然后与其他域匹配,404.conf稍后加载。

相关内容