Apache 2.2忽略了VirtualDocumentRoot VirtualHosts?

时间:2022-04-11 16:54:26

I have several domains that I would like to have wildcard subdomains enabled for through mod_vhost_alias

我有几个域,我希望通过mod_vhost_alias启用通配符子域

Included in my httpd.conf I have the following generalized rules:

包含在我的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>

The problem is that apache is completely ignoring the virtualhosts with the wildcard ServerNames. Any request for test.domain1.com or test.domain2.com will just show the contents of /home/user1/public_html (the default rule according to apache).

问题是apache完全忽略了带有通配符ServerNames的虚拟主机。对test.domain1.com或test.domain2.com的任何请求都只显示/ home / user1 / public_html(根据apache的默认规则)的内容。

Some other information:

/home/user1/subdomains/test and /home/user2/subdomains/test both exist and have files in them

/ home / user1 / subdomains / test和/ home / user2 / subdomains / test都存在并且包含文件

All my domains have a wildcard subdomain listed in bind config, and they are pointing to the same IP specified in the Vhost rules. Standard Vhost rules for subdomains work, but not wildcard.

我的所有域都有一个在bind config中列出的通配符子域,它们指向Vhost规则中指定的相同IP。子域的标准Vhost规则有效,但不是通配符。

A snipped version of the output of httpd -S

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

Any suggestions as to what the problem is would be greatly appreciated.

任何有关问题的建议将不胜感激。

2 个解决方案

#1


I'm such a noob, it was a real simple solution.

我是一个菜鸟,这是一个真正简单的解决方案。

ServerName does not allow wildcards, but ServerAlias does, so I just duplicated the servername again.

ServerName不允许使用通配符,但ServerAlias允许使用通配符,因此我只是重复了服务器名。

Here is the final minimized config for domains anyone who happens to find this answer (I hate it when you search on google and find questions but no answers):

这是域名的最终最小化配置,任何碰巧找到这个答案的人(我讨厌在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>

#2


David, this solution that stops mod_rewrite cycle when success will be useful for your problem).

大卫,这个解决方案在成功对你的问题有用时停止mod_rewrite循环)。

Rewrite round-robin stopper:

重写循环塞:

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

#1


I'm such a noob, it was a real simple solution.

我是一个菜鸟,这是一个真正简单的解决方案。

ServerName does not allow wildcards, but ServerAlias does, so I just duplicated the servername again.

ServerName不允许使用通配符,但ServerAlias允许使用通配符,因此我只是重复了服务器名。

Here is the final minimized config for domains anyone who happens to find this answer (I hate it when you search on google and find questions but no answers):

这是域名的最终最小化配置,任何碰巧找到这个答案的人(我讨厌在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>

#2


David, this solution that stops mod_rewrite cycle when success will be useful for your problem).

大卫,这个解决方案在成功对你的问题有用时停止mod_rewrite循环)。

Rewrite round-robin stopper:

重写循环塞:

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