Apache 2.2 игнорирует VirtualDocumentRoot VirtualHosts? - PullRequest
4 голосов
/ 24 апреля 2009

У меня есть несколько доменов, для которых я хотел бы включить поддомены с подстановочными знаками через 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 существуют и содержат файлы

Все мои домены имеют субдомен подстановочных знаков, указанный в конфигурации bind, и они указывают на один и тот же 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

Будем весьма благодарны за любые предложения относительно проблемы.

Ответы [ 2 ]

11 голосов
/ 24 апреля 2009

Я такой нуб, это было действительно простое решение.

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>
0 голосов
/ 07 февраля 2010

Дэвид, это решение, которое останавливает цикл mod_rewrite, когда успех будет полезен для вашей проблемы).

Перезаписать ограничитель круговой записи:

RewriteCond %{ENV:REDIRECT_STATUS} 200|[45]0[0-9]
RewriteRule .* - [L]
...