Virtualhost для піддомену підстановки та статичного піддомену


78

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

Відповіді:


161
<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.


1
Просто питання, що робить NameVirtualHost *:80?
Педро Морейра,

Ця директива дозволяє віртуальним хостам на основі імен і повідомляє apache прослуховувати всі ip-і (*) на порту 80. Документи Apache 2.2: httpd.apache.org/docs/2.2/en/vhosts/name-based.html
Андреас Хіндербергер

3
Видаліть NameVirtualHost *:80: AH00548: NameVirtualHost не впливає і буде видалений у наступному випуску
nerdoc

Уайлд-кард для мене не працює, знаєте чому?
ericn

1
NameVirtualHost *:80це важливо для apache 2.2, немає потреби в apache 2.4, я не знаю чому.
Лео Лі

19

Узагальнюючі символи можна використовувати лише в, ServerAliasа не в ServerName. Щось, що мене тупило.

Для Вашого випадку використання має бути достатньо наведеного

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

1

Це також працює для https, необхідного рішення для створення каталогів проектів. тому що хром не любить, що не ssl більше не використовується безкоштовний 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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.