Назад | Перейти на главную страницу

Как перенаправить весь поддомен с подстановочными знаками на конкретный поддомен? Проблемы с поддоменом, на котором работает сервер 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 читает файлы конфигурации vhost в алфавитном порядке. Это означает, что 404.conf файлы читаются до nc.conf файл. Таким образом, хост сначала сопоставляется с ServerAlias *.example.com директива, это соответствует, а другие vhosts игнорируются. Переименовав nc.conf файл в 00_nc.conf конфигурация Nextcloud будет загружена первой и, таким образом, будет сопоставлена ​​с nextcloud.example.com, а другой домен сопоставлен с 404.conf который загружается позже.