Apache 2.2 игнорирует VirtualDocumentRoot VirtualHosts?
-
16-09-2019 - |
Вопрос
У меня есть несколько доменов, для которых я хотел бы включить подстановочные поддомены через mod_vhost_alias.
В мой httpd.conf включены следующие обобщенные правила:
<VirtualHost [ip here]:80>
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /home/user1/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName *.domain1.com
VirtualDocumentRoot /home/user1/subdomains/%-3+
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /home/user2/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName *.domain2.com
VirtualDocumentRoot /home/user2/subdomains/%-3+
</VirtualHost>
Проблема в том, что Apache полностью игнорирует виртуальные хосты с подстановочными знаками ServerNames.Любой запрос test.domain1.com или test.domain2.com просто покажет содержимое /home/user1/public_html (правило по умолчанию в соответствии с Apache).
Другая информация:
/home/user1/subdomains/test
и /home/user2/subdomains/test
оба существуют и имеют в себе файлы
Все мои домены имеют поддомен с подстановочными знаками, указанный в конфигурации привязки, и они указывают на тот же IP-адрес, который указан в правилах Vhost.Стандартные правила Vhost для поддоменов работают, но не подстановочные знаки.
Обрезанная версия вывода httpd -S
# httpd -S VirtualHost configuration: [ip here]:80 is a NameVirtualHost default server domain1.com (/etc/httpd/sites/user1:1) port 80 namevhost domain1.com (/etc/httpd/sites/user1:1) port 80 namevhost *.domain1.com (/etc/httpd/sites/user1:14) port 80 namevhost domain2.com (/etc/httpd/sites/user2:1) port 80 namevhost *.domain2.com (/etc/httpd/sites/user2:14) Syntax OK
# httpd -M Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static) so_module (static) rewrite_module (shared) auth_basic_module (shared) authz_host_module (shared) include_module (shared) log_config_module (shared) logio_module (shared) mime_magic_module (shared) mime_module (shared) vhost_alias_module (shared) dir_module (shared) suexec_module (shared) php5_module (shared) suphp_module (shared) ssl_module (shared) Syntax OK
Будем очень признательны за любые предложения относительно того, в чем проблема.
Решение
Я такой нуб, это было очень простое решение.
ServerName
не допускает подстановочных знаков, но ServerAlias
да, поэтому я просто еще раз продублировал имя сервера.
Вот окончательная свернутая конфигурация для доменов, для всех, кто найдет этот ответ (ненавижу, когда вы ищете в Google и находите вопросы, но нет ответов):
<VirtualHost [ip here]:80>
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /home/user1/public_html
</VirtualHost>
<VirtualHost [ip here]:80>
ServerName domain1.com #<-- The fix. Wildcards not supported in ServerName
ServerAlias *.domain1.com
VirtualDocumentRoot /home/user1/subdomains/%-3+
</VirtualHost>
Другие советы
Дэвид, это решение, которое останавливает цикл mod_rewrite в случае успеха, будет полезно для вашей проблемы).
Перепишите стопор циклического перебора:
RewriteCond %{ENV:REDIRECT_STATUS} 200|[45]0[0-9] RewriteRule .* - [L]