apache 上有多个域名(包括 www-“子域名”)吗?

apache 上有多个域名(包括 www-“子域名”)吗?

折腾了一阵子后我决定在这里问一下:

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

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

</VirtualHost>

<VirtualHost *>
    ServerName www.domain2.de
    DocumentRoot /var/www/folder2/
</VirtualHost>

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

现在的问题是:

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

有谁知道为什么第二个域名只有添加“www”才能起作用?

答案1

domain1.de之所以有效,是因为www.domain1.de它是第一个VirtualHost,并且是默认的。您需要添加ServerAlias domain2.dewww.domain2.de,以使较短的版本也能正常工作(您也应该添加ServerAliaswww.domain1.de)。

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

答案2

如果您想要规范化您的域名(例如将所有 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>

重写的三行基本上是:

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

如果您访问“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>

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

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

答案3

www.domain.com 和 domain.com 理论上可以是完全不同的网站。您必须同时指定两者。您可以在现有的 VirtualHost 块中使用 ServerAlias,或者,您可以这样做来执行 301 重定向以进行 SEO。

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

<VirtualHost *>
    ServerName www.domain1.de  
    Redirect permanent / http://domain1.de/ 
</VirtualHost>

<VirtualHost *>
    ServerName domain2.de  
    DocumentRoot /var/www/folder2/
</VirtualHost>

<VirtualHost *>
    ServerName www.domain2.de  
    Redirect permanent / http://domain2.de/ 
</VirtualHost>

答案4

使用 ServerAlias 将多个域名关联到虚拟主机

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

<VirtualHost *>
    ServerName www.domain2.de
    ServerAlias domain2.de *.domain2.de  
    DocumentRoot /var/www/folder2/
</VirtualHost>

相关内容