apache 上的多个域(包括 www-“子域”)?

The*_*ppo 4 configuration domain apache-2.2

折腾了一会后,我决定在这里问:

我有一个虚拟主机,想在这台服务器上使用 2 个域。我的 apache 配置文件如下所示:

NameVirtualHost *
<VirtualHost *>
    ServerName www.domain1.de   
    DocumentRoot /var/www/folder1/

</VirtualHost>

<VirtualHost *>
    ServerName www.domain2.de
    DocumentRoot /var/www/folder2/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

在我的 vhost 域的配置页面上,两个域都分配给了服务器 ip。

现在的问题是:

  • www.domain1.de 有效
  • domain1.de 作品
  • www.domain2.de 作品
  • domain2.de确实工作

有没有人知道为什么第二个域只适用于添加的“www”?

小智 14

domain1.de有效,因为www.domain1.de是第一个VirtualHost并作为默认值。您需要添加ServerAlias domain2.dewww.domain2.de为较短版本的工作,以及(你应该增加ServerAliaswww.domain1.de太)。

如果您不想www.domain1.de作为默认VirtualHost服务,请在开始提供一些简单的 HTML 文件时添加另一个。


Dan*_*dey 5

如果您想规范化您的域(例如将所有 domain.de 重定向到 www.domain.de),您可以使用类似 mod_rewrite 的方法:

<VirtualHost *>
  ServerName www.domain.de
  ServerAlias domain.de

  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^www
  RewriteRule /(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

三个重写行基本上将:

  1. 检查 URL 是否以“www”开头
  2. 如果没有,重定向到http://www.domain.de/[whatever]

如果您转到“domain.de”,它会看到它不是以“www”开头并重定向到“www.domain.de”。

如果您想将此应用于您托管的每个站点,您可以这样做:

<VirtualHost *>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^www
  RewriteRule /(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

<VirtualHost *>
  ServerName www.domain1.de
  DocumentRoot /wherever/1
</VirtualHost>

<VirtualHost *>
  ServerName www.domain2.de
  DocumentRoot /wherever/2
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

然后,当有人尝试转到“domain1.de”时,它将命中第一个虚拟主机,这将自动将他们重定向到“www.[他们输入的任何域]”。

这样,如果您转到“domain1.de”,它会看到它不是以“www”开头并重定向到“www.domain1.de”。对于“domain2.de”,它将重定向到“www.domain2.de”。每次添加新网站时,您都会自动获得此功能,如果您要添加/维护大量网站,这将非常方便。