Виртуальный хост для подстановочного поддомена и статического поддоменов - PullRequest
67 голосов
/ 17 апреля 2009

У меня странная ситуация, когда я хочу, чтобы 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 не исправляет это.

Ответы [ 3 ]

151 голосов
/ 17 апреля 2009
<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.

9 голосов
/ 20 февраля 2018

Подстановочные знаки могут использоваться только в 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

1 голос
/ 21 января 2019

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

<VirtualHost *:443>
ServerAdmin test@test.com
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>

...