![如何禁用对 www.example.com 的访问,但使 laptop.example.com 处于活动状态](https://linux22.com/image/604002/%E5%A6%82%E4%BD%95%E7%A6%81%E7%94%A8%E5%AF%B9%20www.example.com%20%E7%9A%84%E8%AE%BF%E9%97%AE%EF%BC%8C%E4%BD%86%E4%BD%BF%20laptop.example.com%20%E5%A4%84%E4%BA%8E%E6%B4%BB%E5%8A%A8%E7%8A%B6%E6%80%81.png)
我的网站有两个主要部分,可以通过以下方式访问:
www.example.com
对于一般内容laptop.example.com
了解更具体的内容
笔记本电脑部分已准备就绪并部署完毕。用户可以直接访问。此外,搜索引擎已开始抓取和索引它。
但是,总体内容尚未准备好;几个月内也不会准备好。
截至目前,服务器中没有 www 的文档根目录或文件,也没有其虚拟主机标签。
httpd.conf 的内容:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /path/to/website/subdomain/root
ServerName example.com
ServerAlias laptop.example.com
<Directory /path/to/website/subdomain/root>
AllowOverride All
Allow from all
</Directory>
</VirtualHost>
其中没有其他虚拟主机标签。
在我的域名注册商控制面板中,我添加了一个一个记录子域名laptop
并将其指向我的服务器 IP。还有另外两个条目 -@
都www
指向我的 IP。我无法编辑/删除 www 条目。
我以为这就是阻止访问所需的全部内容www
。但是它不起作用!
当用户输入 时www.example.com
,他们会被带到laptop.example.com
。我不希望这种情况发生。只是一些默认的浏览器错误消息,例如找不到服务器或者找不到网页應被顯示。
我怎样才能实现这个目标?
解决方案一:我在 httpd.conf 末尾添加了以下内容
<VirtualHost *:80>
ServerName www.example.com
</VirtualHost>
注意,没有文档根目录!成功了。如果我访问http://www.example.com或者http://example.com。子域名运行良好。
我不认为这是一种优雅的方法。仍在等待更好/更合适的方法。
答案1
ServerName 应该等于包括子域名 laptop 在内的完整域名。否则,所有内容都将可访问。
然后,您可以为 ServerName laptop.example.com 创建一个阻止,并为 www.example.com 创建一个阻止,并强制进行身份验证(除非用户有密码,否则他们无法访问),这也会阻止 Google 抓取。或者,当您仅使用 laptop.example.com 时,完全禁用 www.example.com
用户访问 www.example.com 时会转到 laptop.example.com,因为默认情况下 laptop.example.com 的内容由 ServerName example.com 提供,其中包括 laptop.example.com 和 www.laptop.com。只要 www 和 laptop 都在 DNS 中,它们就会具有相同的内容。
ServerAlias 仅当需要将多个域名重定向到 VirtualHost 块中定义的内容时才使用。例如,如果您的 DNS 中有 laptop1 和 laptop2,并且您希望对两者应用相同的 VirtualHost。
希望这能解决您遇到的问题...
编辑以回答您的评论:
我的配置文件中有这个:
<VirtualHost 192.168.0.103:80>
ServerName laptop
ServerAlias laptop laptop.example.com
DocumentRoot /var/www/laptop
</VirtualHost>
然后,如果我想将另一个内容应用于名为 www 的第二个 VirtualHost,我将添加与此类似的第二段,但使用不同的 ServerName、ServerAlias 和 DocumentRoot。我只是想解释一下,您可以通过身份验证来做到这一点,以确保在开发过程中您是唯一可以访问 VirtualHost 的人