Вопрос

У меня есть несколько доменов, для которых я хотел бы включить подстановочные поддомены через 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]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top