Моя цель состоит в том, чтобы смочь создать 2 виртуальных хоста, где каждый соответствует dev среде и другому к тестовой среде в моей локальной машине человечности 16.04. Одна вещь, которая конкретна к этому приложению, состоит в том, что оно должно поддерживать динамические субдомены. Некоторые из них фиксируются как вход в систему и администраторский субдомен, но также и у каждого пользователя будет их собственный субдомен. Этот виртуальный хост хорошо работает для dev среды:
<VirtualHost *:80>
ServerName myapp.local
ServerAlias *.myapp.local
DocumentRoot /var/www/myapp/web
<Directory /var/www/myapp/web/>
AllowOverride All
Require local
</Directory>
ErrorLog /var/www/myapp/logs/error.log
CustomLog /var/www/myapp/logs/access.log combined
</VirtualHost>
Теперь я хочу смочь иметь виртуальный хост к тестовой версии и получить доступ к ней этим URL: login.test.myapp.local, admin.test.myapp.local... Вот виртуальный хост, который я имею, который все еще не работает, потому что запрос всегда падает в первом виртуальном хосте в это время:
<VirtualHost *:80>
ServerName test.myapp.local
ServerAlias *.test.myapp.local
DocumentRoot /var/www/test.myapp/web
<Directory /var/www/test.myapp/web/>
AllowOverride All
Require local
</Directory>
ErrorLog /var/www/test.myapp/logs/error.log
CustomLog /var/www/test.myapp/logs/access.log combined
</VirtualHost>
Я знаю, что должен сказать первому виртуальному хосту игнорировать URL, которые запускаются с "теста". и "*.test". но я не знаю, как сделать это.
Спасибо
Apache интерпретирует свою конфигурацию в порядке, в котором он зарегистрирован. Например, мы ставим первое место отклонять директивы и на втором позволить директивы.
То, что Вам нужно, должно поместить Ваши виртуальные конфигурации хоста в правильный порядок. Например, поместите тест виртуальная конфигурация хоста в conf названный файл 001-test.myapp.local.conf
и регулярный виртуальный хост в файле называют 002-myapp.local.conf
. Или если обе конфигурации находятся в одном месте файла тест одно первое:
$ cat /etc/apache2/sites-available/myapp.local.conf
<VirtualHost *:80>
ServerName test.myapp.local
ServerAlias *.test.myapp.local
DocumentRoot /var/www/test.myapp/web
<Directory /var/www/test.myapp/web/>
AllowOverride All
Require local
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName myapp.local
ServerAlias *.myapp.local
DocumentRoot /var/www/myapp/web
<Directory /var/www/myapp/web/>
AllowOverride All
Require local
</Directory>
</VirtualHost>
Таким образом запросы, который не соответствует к первому виртуальному хосту, попадут во второе. Вот то, как это работает над Ubuntu 18.04 с Apache/2.4.29: