如何设置Apache,使example.com和www.example.com这两个域都能提供相同的内容?

我有一个域 – example.com

以下是我的DNSlogging

 example.com A IP address www.example.com A IP address 

这是我的Apache虚拟主机configuration。

 <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/public_html/www.example.com </VirtualHost> 

现在,当我在浏览器中inputexample.com (没有www部分)时,我从DocumentRoot得到默认的Apache页面文件。 当我将www添加到我的域时,一切正常。

现在的问题是如何设置这个域名www.example.comexample.com服务于文件根目录相同的文件? 我应该在DNS级别处理这个问题还是以某种方式configurationWeb服务器? 所有这一切都是白搭,所以这个问题可能是愚蠢的。

你应该添加一个ServerAlias – 修改你的VirtualHost看起来像这样:

 <VirtualHost *:80> # This first-listed virtual host is also the default for *:80 ServerName www.example.com ServerAlias example.com DocumentRoot "/www/domain" </VirtualHost> 

您也可以将所有子域名redirect到您的根目录

 ServerAlias example.com *.example.com 

正如ceejayoz在他的评论中所说 ,你需要一个ServerAlias

 <VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/public_html/www.example.com </VirtualHost> 

无论你是否将ServerNameServerAlias作为www ,实际上都是一个偏好问题。 如果您订阅no-www信念或yes-www信念,就好像您正在使用UseCanonicalName指令一样,您可能会发现,您可能会发现Apache会将用户redirect到某个意想不到的地方。

也就像ceejayoz提到的那样,你想select一个阵营(www.example.com或者仅仅是naked example.com)并坚持下去。 你不是真的想在这两个变体上提供相同的内容 – 别名应该真的redirect到规范的内容。 有一千个网站,会告诉你如何设置这个mod_rewrite

对于Nginx:

  server { server_name www.example.com; rewrite ^/(.\*) http://example.com/$1 permanent; 

对于Apache示例:

  <VirtualHost \*:80> ServerName example.com ServerAlias www.example.com </VirtualHost> 

更改后重新启动服务:

在你的apache问题旁边:
http://www.example.com应该是example.com的CNAME&#x3002; 一个logging就够了。