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

Заставить Virtualhost обнаруживать Wildcard с префиксом www и без него

В моем Apache (Xampp) httpd-vhosts.conf файл, который я добавил этот виртуальный хост. Он позволяет мне использовать имена подстановочных знаков, например testserver1.dev и testserver2.dev Мне просто нужно обязательно добавить имя в свой файл Windows Hosts.

<VirtualHost *:80>
  VirtualDocumentRoot  E:/Server/htdocs/projects/%1/www
  ServerAlias *.dev
</VirtualHost>

Но я бы хотел добавить к этой функциональности и заставить ее работать, если имя начинается с www так testserver1.dev также будет работать как www.testserver1.dev

Если бы я попытался получить доступ к этому URL-адресу, он будет выглядеть в папке с именем www.testserver1 вместо папки testserver1

Избавьтесь от ServerAlias ​​и измените% 1 на% -2.

<VirtualHost *:80>
  VirtualDocumentRoot  E:/Server/htdocs/projects/%-2/www
</VirtualHost>

Как объяснено в Раздел «Интерполяция имен каталогов» документации mod_vhost_alias, то %-2 скажет Apache посмотреть на вторую часть из последней части имени.

В следующем разделе связанного документа есть примеры, один из которых следующий:

VirtualDocumentRoot "/usr/local/apache/vhosts/%-2.0.%-1.0"

Что позволит www.example.com так же как www.sub.example.com или example.com для обслуживания файлов из /usr/local/apache/vhosts/example.com. Это происходит следующим образом:

%-2.0  # The second from the last part of the name with a zero-length substring.
       # The .0 is necessary as we need to specify a literal period next and don't
       # want the parser to confuse it with a substring specification.

.      # a literal period

%-1.0  # the last part of the name with a zero-length substring. The .0 should be
       # optional here as there's nothing left to cause confusion, but it doesn't
       # hurt anything to have it.