我该如何设置 apache 以便像 example.com 和 www.example.com 这样的域名都提供相同的内容?

我该如何设置 apache 以便像 example.com 和 www.example.com 这样的域名都提供相同的内容?

我有一个域名 - example.com

以下是我的DNS 记录

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

这是我的阿帕奇虚拟主机配置。

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

现在,当我在浏览器中输入example.com(不带部分)时,我得到默认www阿帕奇页面不是文件DocumentRoot。当我添加www到我的域名时,一切正常。

现在的问题是如何设置以便两个域都www.example.com可以example.com从文档根目录提供相同的文件?我应该在 DNS 级别处理这个问题还是以某种方式配置 Web 服务器?我对这些都不熟悉,所以这个问题可能很愚蠢。

答案1

您应该添加 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>

您还可以将所有子域名重定向到您的根域名

ServerAlias example.com *.example.com

答案2

作为ceejayoz 在他的评论中说, 你需要一个ServerAlias

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

您是否拥有ServerNameServerAlias是否www拥有真的是一个偏好问题。如果您订阅无 www信仰或是的-www信念,就好像您正在使用UseCanonicalName指令一样,您可能会发现 Apache 将您的用户重定向到某个稍微出乎意料的地方。

此外,正如 ceejayoz 所提到的,您需要选择一个阵营(www.example.com 或裸露的 example.com)并坚持使用它。您实际上并不希望在两个变体上提供相同的内容 - 别名的那个应该真正重定向到规范的那个。有上千个网站会告诉您如何使用 进行设置mod_rewrite

答案3

对于 Nginx:

  server {

  server_name  www.example.com;

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

对于 Apache 示例:

  <VirtualHost \*:80>

  ServerName  example.com

  ServerAlias www.example.com

</VirtualHost>

更改后重新启动服务:

答案4

除了您的 apache 问题之外:
www.example.com 应该是 example.com 的 CNAME。一个 A 记录就足够了。

相关内容