![我该如何设置 apache 以便像 example.com 和 www.example.com 这样的域名都提供相同的内容?](https://linux22.com/image/678614/%E6%88%91%E8%AF%A5%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%20apache%20%E4%BB%A5%E4%BE%BF%E5%83%8F%20example.com%20%E5%92%8C%20www.example.com%20%E8%BF%99%E6%A0%B7%E7%9A%84%E5%9F%9F%E5%90%8D%E9%83%BD%E6%8F%90%E4%BE%9B%E7%9B%B8%E5%90%8C%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9F.png)
我有一个域名 - 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>
您是否拥有ServerName
或ServerAlias
是否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 记录就足够了。