折腾了一阵子后我决定在这里问一下:
我有一个 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.de
至www.domain2.de
,以使较短的版本也能正常工作(您也应该添加ServerAlias
至www.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>
重写的三行基本上是:
- 检查 URL 是否以“www”开头
- 如果没有,则重定向至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>