用于通配符子域和静态子域的Virtualhost


76

我有一个奇怪的情况,我想拥有URL app1.example.comexample.com并且*.example.com 都使用不同的虚拟主机。这就是我所拥有的(不包括example.com因为它使它更混乱)。

<VirtualHost *>
  ServerName app1.example.com
  ServerAlias app1.example.com

  DocumentRoot = /var/www/app1
  # Other configuration for this app here

</VirtualHost>

<VirtualHost *>
  ServerName wildcard.example.com
  ServerAlias *.example.com

  DocumentRoot = /var/www/wildcard
  # other configuration for this app here

</VirtualHost>

问题是它们发生冲突。首先列出的那个胜出。如何同时托管通配符虚拟主机和特定主机?

注意:我不只是DocumentRoot在配置中mod_rewrite进行更改,因此使用更改DocumentRoot变量并不能解决该问题。

Answers:


159
<VirtualHost *:80>
  DocumentRoot /var/www/app1
  ServerName app1.example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/example
  ServerName example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/wildcard
  ServerName other.example.com
  ServerAlias *.example.com
</VirtualHost>

应该管用。如果您没有明确匹配,则第一个条目将成为默认条目。因此,如果您有app.otherexample.com指向它,它将被app1.example.com捕获。


1
只是一个问题,怎么NameVirtualHost *:80办?
Pedro Moreira 2014年

该指令实现了基于虚拟主机的名字,并告诉Apache在端口80上的所有的ip的(*)听Apache 2.2的文档:httpd.apache.org/docs/2.2/en/vhosts/name-based.html
安德烈亚斯Hinderberger

3
删除NameVirtualHost *:80:AH00548:NameVirtualHost无效,将在下一版本中删除
nerdoc

通配符对我不起作用,您知道为什么吗?
ericn 2015年

1
NameVirtualHost *:80对于apache 2.2很重要,不需要apache 2.4,我不知道为什么。
Leo Lee


1

这也适用于https需要这样的项目目录解决方案。因为Chrome不再喜欢non ssl了,所以不再使用免费的ssl。注意:我的Web服务器在Windows 10上是Wamp64,因此除非有使用wamp的原因,否则我不会因为变量而使用此配置。

<VirtualHost *:443>
ServerAdmin test@test.com
ServerName test.com
ServerAlias *.test.com

SSLEngine On
SSLCertificateFile "conf/key/certificatecom.crt"
SSLCertificateKeyFile "conf/key/privatecom.key"

VirtualDocumentRoot "${INSTALL_DIR}/www/subdomains/%1/"

DocumentRoot "${INSTALL_DIR}/www/subdomains"
<Directory "${INSTALL_DIR}/www/subdomains/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.