83

我有一个奇怪的情况,我想拥有 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 变量并不能修复它。

4

3 回答 3

170
<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 捕获。

于 2009-04-16T23:02:58.290 回答
27

通配符只能用在ServerAlias而不是ServerName. 让我难过的东西。

对于您的用例,以下内容就足够了

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/%1/
</VirtualHost>
于 2018-02-20T20:28:52.993 回答
2

这也适用于 https 需要一个解决方案来制作项目目录就是这样。因为 chrome 不再喜欢非 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>

于 2019-01-21T00:03:51.670 回答