Apache 2.2 忽略 VirtualDocumentRoot VirtualHosts? [英] Apache 2.2 ignoring VirtualDocumentRoot VirtualHosts?
问题描述
我有几个域希望通过 mod_vhost_alias 启用通配符子域
I have several domains that I would like to have wildcard subdomains enabled for through mod_vhost_alias
在我的 httpd.conf 中包含以下通用规则:
Included in my httpd.conf I have the following generalized rules:
<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 的默认规则).
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).
/home/user1/subdomains/test
和 /home/user2/subdomains/test
都存在并且其中有文件
/home/user1/subdomains/test
and /home/user2/subdomains/test
both exist and have files in them
我的所有域在绑定配置中都有一个通配符子域,它们指向 Vhost 规则中指定的同一个 IP.子域的标准 Vhost 规则有效,但不能使用通配符.
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.
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.
推荐答案
我是个菜鸟,这是一个非常简单的解决方案.
I'm such a noob, it was a real simple solution.
ServerName
不允许使用通配符,但 ServerAlias
允许,所以我再次复制了服务器名称.
ServerName
does not allow wildcards, but ServerAlias
does, so I just duplicated the servername again.
这是针对碰巧找到此答案的任何人的域的最终最小化配置(当您在 google 上搜索并找到问题但没有答案时,我讨厌它):
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):
<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>
这篇关于Apache 2.2 忽略 VirtualDocumentRoot VirtualHosts?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!