用于通配符子域和静态子域的虚拟主机

Dav*_*ave 70 apache subdomain wildcard-subdomain virtualhost

我有一个奇怪的情况下,我想有网址app1.example.com,example.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>
Run Code Online (Sandbox Code Playgroud)

问题是他们发生冲突.无论哪一个列出首先胜出.如何托管通配符虚拟主机和特定主机?

注意:我不只是更改DocumentRoot配置,因此使用mod_rewrite更改DocumentRoot变量不会修复它.

Tim*_*Tim 153

<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>
Run Code Online (Sandbox Code Playgroud)

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

  • 删除`NameVirtualHost*:80`:AH00548:NameVirtualHost无效,将在下一个版本中删除 (3认同)

Chr*_*haw 13

通配符只能在ServerAlias中使用,而不能在ServerName中使用.让我难过的东西.

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

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/%1/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

还有更多信息,访问https://www.chris-shaw.com/blog/using-wildcards-in-virtual-hosts-on-apache