如何仅使用 A 记录和 CNAME 记录将域 A 重定向到域 B

如何仅使用 A 记录和 CNAME 记录将域 A 重定向到域 B

我有 2 个域名托管在不同主机上。我需要将域 A 重定向到域 B。不幸的是,我无法从主机 A 进行 301 重定向,但只能在主机 A 上修改/添加 DNS 条目(A 记录和 CNAME)。

当然,仅使用 A 记录和 CNAME 就可以将 www.DomainA.com 重定向到 www.DomainB.com 吗?

目前DNS条目为:

DomainA.com.    3600    IN    SOA       ns1.HostA.net.
www             3600    IN    CNAME     www.DomainB.com.    
DomainA.com.    3600    IN    NS        ns1.HostA.net.  
DomainA.com.    3600    IN    NS        ns2.HostA.net.  
DomainA.com.    3600    IN    NS        ns3.HostA.net.

我想重定向

DomainA.com -> DomainB.com
*.DomainA.com -> *.DomainB.com

我已经尝试过这个建议其他帖子但它不起作用。

请问我如何仅使用 A 记录和 CNAME 来实现此目的?谢谢您的建议。

普雷姆博。

答案1

因此,您不是在考虑重定向本身(因为这发生在应用程序级别,即在 Apache/Nginx/任何地方),而是在考虑 DNS 解析。根据您的描述,托管 DomainA 的主机将或永远不应该被命中,因为您希望 DNS 请求解析为 DomainB 的 IP。除非我遗漏了您的请求中的某些内容?

正如 Shane 指出的那样,DNS 无法进行 HTTP 重定向 - 这是应用程序/Web 服务器的职责。您可以让 DomainA 和 DomainB 在 DNS 上解析为相同的 IP,这样一切都会正常进行。但是,如果您希望以每个 URL/每个路径的方式执行此操作,那么这是不可能的 - DNS 无法做到这一点 - 它是一种简单的 DNS->IP 服务,实际 URL 的处理是 Web 服务器的任务。

在下面的评论之后,我要做的是将 DomainA 的所有 DNS 记录引用到与 DomainB 指向的相同 IP - 这样您将获得到达 hostB 的 HTTP 请求,然后这只是一个简单的问题:

  1. 创建一个特定的基于 Apache 名称的虚拟主机 - 它将通过自己的 DocumentRoot 提供文件服务
  2. 在 Apache 上创建永久重定向,如下所示:

这会将传入 DomainB 的所有内容重写到可以托管在同一台服务器或其他服务器上的 DomainA。我理解第二种选择可能是一种开销,如果您可以/被允许在 apache 上创建基于名称的虚拟主机,则没有必要。

<VirtualHost *:80>
  ServerName DomainB
  Redirect permanent / http://DomainA/
</VirtualHost>

我会选择 1. - 将 DomainA 的所有 DNS 记录指向与 DomainB 指向的相同 IP,并在 Apache 上创建特定的基于名称的虚拟主机。

答案2

正如其他人所说,仅使用 DNS 无法执行 HTTP 重定向。DNS 和 HTTP 协同工作,将用户从一个网页重定向到另一个网页。

您可以单独使用 DNS 使域 A 显示与域 B 相同的内容,但 Web 浏览器会在 URL 中显示域 A。您需要非常小心,因为从 SEO 角度来看,这非常糟糕。您会因“重复内容”而陷入麻烦,搜索引擎也会因此惩罚您。

正确的方法(从 UX 和 SEO 角度来看)是执行从域 A 到域 B 的 HTTP 重定向。

如果您有技术能力,您可以手动配置您的 Web 服务器(Apache、Nginx、IIS 等)来为您完成这项工作。网络上有很多很好的资源可以帮助您完成这项工作。

如果你不能或不想控制基础设施,你可以使用 URL 重定向服务来为你完成这项工作。我是一家名为易红目录,但肯定还有其他的。

答案3

域 A 需要具有与域 B 相同的 IP 地址。A 的定义中无需引用 B。Web 浏览器不会“跟随”CNAME 进行重定向,它们将保留相同的主机名并使用 CNAME 自己的记录来解析 IP 地址。

如果您希望在访问 A 时 B 出现在浏览器中(可选,与 DNS 无关),则需要匹配 HTTP 主机并在 Web 服务器上重定向请求。使用 Apache,您可以使用 mod_rewrite 在虚拟主机定义中执行以下操作:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?domainB.com$
RewriteRule ^/(.*)$ http://www.domainA.com/$1 [R=301,L]

答案4

我还没有尝试过,但我思考你可以这样做:

DomainA.com. CNAME DomainB.com.

这完全替代了 DomainA 区域文件中的任何其他记录。没有 SOA,什么都没有。

请不要在您关心的域上尝试此操作。

相关内容