我的网站的两个主要部分可以访问使用:
www.example.com为一般内容
laptop.example.com更具体的内容
笔记本电脑部分已准备就绪并部署。 用户可以直接访问它。 此外,search引擎已经开始爬行和编制索引。
但是,一般的内容还没有准备好; 这将不会持续几个月。
截至目前,在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添加了A Record ,并将其指向我的服务器IP。 还有两个条目 – @和www都指向我的IP。 我无法编辑/删除www条目。
我认为这是防止访问www所需的一切。 但它不工作!
当用户inputwww.example.com ,他们被带到laptop.example.com 。 我不想要这样的事情发生。 只是一些默认的浏览器错误消息, 如未find服务器或页面未find应显示。
我怎样才能做到这一点?
一个解决scheme:我在httpd.conf结尾添加了以下内容
<VirtualHost *:80> ServerName www.example.com </VirtualHost>
注意没有文档根目录! 有效。 如果访问http://www.example.com或http://example.com,我会得到一个404。 而子域正在工作得很好。
我不认为这是一个优雅的方法。 还在等待一个更好的/正确的方式来做到这一点。
ServerName应该等于包含子域笔记本电脑的完整域名。 否则,整个内容将是可达的。
然后,你可以为ServerName laptop.example.com创build一个块,另一个创build一个带有www.example.com的块,强制authentication(用户不能访问,除非他们有密码),这也会阻止谷歌爬行。 或者当您只使用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和笔记本电脑都在DNS中,他们就会拥有相同的内容。
ServerAlias只有当多个域名必须redirect到块VirtualHost中定义的内容时。 例如,如果您在DNS中具有laptop1和laptop2,并且您希望为两者应用相同的VirtualHost。
希望这可以解决你遇到的问题…
编辑回答你的评论:
我将这个在我的configuration文件中:
<VirtualHost 192.168.0.103:80> ServerName laptop ServerAlias laptop laptop.example.com DocumentRoot /var/www/laptop </VirtualHost>
然后,如果我想为另一个名为www的VirtualHost申请另一个内容,我将添加与此类似的第二个段落,但使用不同的ServerName,ServerAlias,DocumentRoot。 我只是想解释一下,你可以通过身份validation来做到这一点,以确保在开发过程中,你是唯一一个访问你的虚拟主机