![具有通配符域名子域的 VirtualHosts。*](https://linux22.com/image/490599/%E5%85%B7%E6%9C%89%E9%80%9A%E9%85%8D%E7%AC%A6%E5%9F%9F%E5%90%8D%E5%AD%90%E5%9F%9F%E7%9A%84%20VirtualHosts%E3%80%82*.png)
我正在尝试在 Apache 上设置虚拟主机,以响应某些子域名,但任何域名
例如
子域名.*
因此,任何与 subxdomain 一起指向机器的域都可以工作
服务器名称 web.* ...
因此 web.blahblah.com 和 web.mooose.com 都可以工作(*.blahblah.com 和 *.mooose.com 都解析到同一台机器)
答案1
下面的代码片段应该可以解决问题:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName subdomain
ServerAlias subdomain.*
# other directives for the particular vhost
</VirtualHost>
请参阅服务器别名和基于名称的虚拟主机支持了解详情。
答案2
我不确定您是否可以使用海量虚拟主机(apache2)。我以前从未做过这样的事情。 http://httpd.apache.org/docs/2.0/vhosts/mass.html
您到底想通过这个解决方案实现什么目的?
答案3
这并不难。
默认情况下,Apache 将响应您配置的任何端口上的所有流量。
只需将其设置为监听分配了地址的 IP 上的端口 80。
为每个命名站点设置具有不同目录和主机名的 Vhost,这些应该优先于通配符。
这将使所有命名的站点都去到它们需要去的地方,并且服务器收到的任何其他内容都将获得默认页面。
为了确保万无一失,我会将命名的站点放在 httpd.conf 中的通配符上方
答案4
不能将通配符与 ServerName 一起使用。
你可以做的是使用默认的 VirtualHost 作为万能工具:
<VirtualHost *:80>
# NEVER add a ServerName in this VirtualHost
(...)
</VirtualHost>
只要 web.blahblah.com 和 web.mooose.com 没有 VirtualHost,它们都会在默认 VirtualHost 下工作。
您还可以使用重写将请求重定向到不同的 URL:
RewriteCond %{HTTP_HOST} ^web.moose.com$
RewriteRule ^/(.*)$ http://other.moose.com/web/$1 [R,L]
希望有所帮助。
干杯