C-NAMES
我对、、A-RECORDS
名称服务器等一无所知,因此请耐心听我讲解这一点:
我想将 subdomain.example.org 重定向到另一个域 somethingelse.com。我确实拥有这两个域,并且这两个域都在共享主机上运行。创建子域时,我能做的就是进行 HTTP 重定向(302,真恶心!)或框架重定向。
我还可以在一台主机上设置 DNS 记录,例如名称服务器,CNAME
但我不知道自己在做什么。
请向我解释一下域名服务器路由的工作原理,以及我如何应该(即使我当前的主机无法实现)将 subdomain.example.org 重定向到 somethingelse.com,用户可见的 URL 仍为“subdomain.example.org”
答案1
名称服务器不路由任何内容。名称服务器响应名称请求,并最终返回 IP。CNAME 记录返回名称,然后查找该名称以获取 IP。您真正可以使用 DNS 记录做的唯一事情是确保您的名称设置为返回将接受流量并执行您想要的操作的服务器的 IP 地址。
如果您使用基于名称的虚拟主机设置来设置 Web 服务器,并且该虚拟主机的主名称是,somethingelse.com
那么您可以为该虚拟主机设置一个附加名称subdomain.example.org
。在 DNS 中,您可以设置记录以返回虚拟主机服务的 IP somethingelse.com
。
托管的网站somethingelse.com
必须尽可能使用相对链接,否则用户很快就会意识到他们现在已经切换到不同的域。
……这是关键点。我该怎么做呢?
只需创建一个将名称与 IP 关联的 A 记录,或创建一个指向 A 记录(该记录指向您想要的 IP)的 CNAME 记录。
DNS 一无所知。您请求的内容需要在 HTTP 服务器上处理。
否则,我可以将我的域名指向 google.com 并使其看起来像是我的网站吗?
您可以将 DNS 记录指向任何您喜欢的 IP 地址。对于 HTTP,请求的一部分包括您尝试访问的主机名。Google 网络服务器可能会根据 HTTP 请求中的主机名选择拒绝。
如果您是 Google Apps 客户,甚至可以设置指向 Google 服务器的 DNS 名称。您必须遵循一个程序来告诉 Google 您将为特定页面使用什么名称。然后 Google 会相应地调整其配置。
如果您使用其他不包含用于访问的主机名的协议,那么服务器将无法知道什么是什么。您可以通过创建记录(如)googledns.example.org IN A 8.8.8.8
然后运行来轻松测试这一点ping googledns.example.org
,Google 的 DNS 服务器将响应 ping。您用于 ping 命令的名称根本不包含在 ICMP 回显回复中,只有 IP 地址。
答案2
为什么不能在子域所在的文件夹中设置一个 .htaccess 文件(带有 301 重定向)?
例如:
- 在文件夹 example.org/subdomain 中创建一个 .htaccess 文件
- 根据上述文件夹在 Cpanel 中设置子域名
编辑新的 .htaccess 文件并添加以下代码
重定向 301 /http://somethingelse.com
/ 是子域名的根目录,并且http://somethingelse.com到达您想要发送的位置。
对我有用。
答案3
在共享主机上,使用 CNAMES 的 DNS 重定向无法按您希望的方式工作。
为了便于说明,假设您有指向 somethingelse.com 的 subdomain.example.org 的“CNAME”记录和指向 somethingelse.com 的“A”记录。当您访问 subdomain.example.com 时,系统会首先查询 DNS 服务器以确定正确的 IP 地址。DNS 服务器将看到 CNAME 记录并递归确定 somethingelse.com 的 IP 地址,然后将其返回到您的桌面。
然后,您的浏览器将联系该 IP 地址,并请求 subdomain.example.com。事实上,它甚至不知道 somethingelse.com 的存在。
如果您有专用的盒子,您可以让 CNAME 按照您认为的方式工作,但您将失去使用基于名称的虚拟主机的能力。使用基于 IP 的虚拟主机,指向给定 IP 的任何域都将提供相同的内容。
当页面由 somethingelse.com 提供时,为了让您的浏览器地址栏显示 subdomain.example.org,您可以重新考虑使用主机提供的框架重定向。
另一种可能性是,如果您的主机提供 mod_proxy,则在 subdomain.example.com 的虚拟主机配置中设置反向代理:
ProxyPass / http://somethingelse.com/
ProxyPassReverse / somethingelse.com/
这将导致 subdomain.example.com 提供 somethingelse.com 的内容,同时仍将 subdomain.example.com 报告为源域。
答案4
唯一完整的解决方案是设置一个 Web 服务器来监听“subdomain.example.org”,并使用 HTTP 重定向将其重定向到“somethingelse.com”。
如果您使用 cname 将“subdomain.example.org”指向“somethingelse.com”,则 Web 浏览器将与“somethingelse.com”的 Web 服务器通信,但它会说“我正在寻找 subdomain.example.org”,但这可能并未配置。如果您可以将 Web 服务器配置为接受这两个 URL,那么 cname 将正常工作。