我的网站有一个域名:
example.com
我还使用以下行运行本地 DNS:
www IN CNAME server.<host_provider>.com.
dev IN CNAME server.<host_provider>.com.
因此www.example.com
,dev.example.com
分别转到由托管公司托管的生产和开发站点。
在我的主站点的 Apache 配置中,我正在运行如下重写规则:
RewriteEngine ON
RewriteCond %{HTTP_HOST} ^example\.com$|!dev\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www\.%{HTTP_HOST}/$1 [R=302,L,NE]
这条规则似乎有效,因为当您脱离网络并example.com
在浏览器中访问 时,您会被重定向到www.example.com
。
问题是,当我上网时,我进入example.com
一个错误页面,提示找不到页面。没有服务器错误;只是找不到页面,好像本地 DNS 导致它在那时停止查看。
我还使用 Nettica 提供 DNS 服务,并设置了以下 A 记录:
example.com Host (A) Default xxx.xx.xxx.xx
这处理外部 DNS,但我的问题似乎与我的内部 DNS 有关。
例如,在我的网络内部,我可以使用如下地址访问网络上的服务器:
server.example.com
server1.example.com
server2.example.com
这些是在我的本地 DNS 中配置的。我只是不确定如何越过“空”子域并转到example.com
。
由于可能不太清楚,因此在此补充。如果我在网络之外example.com
,在另一个网络上,例如example123.com
,那么当我访问时,example.com
我会被重定向到www.example.com
预期的位置,例如,Apache 重写规则正在运行。
编辑
在@ErikE的帮助下,经过故障排除和测试,我找到了答案。似乎我发现了另一种方法以及@ErikE的建议:
在本地 DNS 中添加以下任一个似乎都可以:
example.com IN CNAME server.<host_provider>.com.
example.com IN CNAME www.example.com.
谢谢。
答案1
在我看来,您需要在本地 DNS 中为域 example.com 本身设置一个空的 A 记录(或具有相同效果的其他记录)。
如果我没记错的话(距离我上次这样做已经有一段时间了),在 BIND 中,可以在 example.com 的区域文件中使用以下语法来实现:
A 1.2.3.4
或者在 Windows DNS 中:
@ IN A 1.2.3.4
但是,例如使用 dnsmasq,配置方式将完全不同。那么,您在本地使用哪个品牌的 dns 服务器?
我不确定是否可以用同样的方式写入 CNAME 记录。如果您希望引用您的提供商,而不是在本地 DNS 中明确写入 IP 地址,您当然可以尝试。