Apache 2.2 忽略 VirtualDocumentRoot VirtualHosts?
我有几个域,我想通过 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。 子域的标准虚拟主机规则有效,但通配符无效。
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
任何有关问题所在的建议将不胜感激。
I have several domains that I would like to have wildcard subdomains enabled for through mod_vhost_alias
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>
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).
Some other information:
/home/user1/subdomains/test
and /home/user2/subdomains/test
both exist and have files in them
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.
A snipped version of the output of 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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我真是个菜鸟,这是一个非常简单的解决方案。
ServerName
不允许使用通配符,但ServerAlias
允许,所以我只是再次复制了服务器名称。这是任何碰巧找到这个答案的域的最终最小化配置(我讨厌当你在谷歌上搜索并找到问题但没有答案时):
I'm such a noob, it was a real simple solution.
ServerName
does not allow wildcards, butServerAlias
does, so I just duplicated the servername again.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):
大卫,这个在成功时停止 mod_rewrite 循环的解决方案对您的问题很有用)。
重写循环停止器:
David, this solution that stops mod_rewrite cycle when success will be useful for your problem).
Rewrite round-robin stopper: