Виртуальный хост для поддомена подстановки и статического субдомена

У меня странная ситуация, когда я хочу иметь URL-адреса app1.example.com, example.com и *.example.com все с использованием другого виртуального хоста. Это то, что у меня есть (исключая example.com, потому что это просто делает его более беспорядочным).

<VirtualHost *>
  ServerName app1.example.com
  ServerAlias app1.example.com

  DocumentRoot = /var/www/app1
  # Other configuration for this app here

</VirtualHost>

<VirtualHost *>
  ServerName wildcard.example.com
  ServerAlias *.example.com

  DocumentRoot = /var/www/wildcard
  # other configuration for this app here

</VirtualHost>

Проблема в том, что они конфликтуют. Кто бы ни был указан первым, побеждает. Как я могу разместить как виртуальный хост подстановки, так и определенный?

Примечание. Я не просто изменяю DocumentRoot в конфигурации, поэтому использование mod_rewrite для изменения переменной DocumentRoot не исправляет ее.

Ответ 1

<VirtualHost *:80>
  DocumentRoot /var/www/app1
  ServerName app1.example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/example
  ServerName example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/wildcard
  ServerName other.example.com
  ServerAlias *.example.com
</VirtualHost>

Должен работать. Первая запись станет по умолчанию, если вы не получите явное совпадение. Поэтому, если бы у вас был app.otherexample.com, то он был бы пойман app1.example.com.

Ответ 2

Подстановочные знаки могут использоваться только в ServerAlias, а не в ServerName. Что-то, что меня озадачило.

Для вашего случая использования должно быть достаточно следующего

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/%1/
</VirtualHost>

также есть больше информации на https://www.chris-shaw.com/blog/using-wildcards-in-virtual-hosts-on-apache

Ответ 3

Это также работает для https. Нужно было решение для создания каталогов проектов. потому что chrome не любит non ssl, больше не использует free ssl. Примечание. Мой веб-сервер работает под управлением Wamp64 в Windows 10, поэтому я не буду использовать эту конфигурацию из-за переменных, если вы не используете wamp.

<VirtualHost *:443>
ServerAdmin [email protected]
ServerName test.com
ServerAlias *.test.com

SSLEngine On
SSLCertificateFile "conf/key/certificatecom.crt"
SSLCertificateKeyFile "conf/key/privatecom.key"

VirtualDocumentRoot "${INSTALL_DIR}/www/subdomains/%1/"

DocumentRoot "${INSTALL_DIR}/www/subdomains"
<Directory "${INSTALL_DIR}/www/subdomains/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>