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


46

我有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-Records和CNAME来实现?感谢您的意见。

Prembo。


2
您希望实现哪种重定向?DNS 无法以任何方式像HTTP重定向那样起作用-不可能更改浏览器试图单独访问DNS的主机。
Shane Madden

我知道301重定向是理想的,这就是我们打算在不久的将来进行的操作(不幸的是,域A在主机A上停留了50天,并且由于锁定期而无法转让。主机A不会除非您为额外的“程序包”付费,否则您可以进行HTTP重定向)。所以,暂且,我们只是想任何流量域名重定向反正域,我们继续之前域A跨越到主机B
Prembo

1
DNS 无法执行重定向。的唯一的事情DNS可以做的是别名(一个名字看起来与另一个相同,喜欢的复印件)。这与将到达一个地方的人送往另一个地方不同。
克里斯·S

感谢您澄清HTTP重定向和DNS解析/委托之间的区别。我现在知道了。
普伦博

Answers:


38

因此,您不是在考虑重定向(在应用程序级别,即在Apache / Nginx /任何地方),而是在DNS解析方面。当您希望将DNS请求解析为DomainB的IP时,根据您的描述,将不会或永远不会命中托管DomainA的主机。除非我在您的请求中遗漏了什么?

正如Shane所指出的那样,DNS无法进行HTTP重定向-这是应用程序/网络服务器的职责。您可以使DomainA和DomainB解析为DNS上的相同IP,并且所有这些都可以工作。但是,如果您希望按照每个URL /每个路径的方式执行此操作,那么这是不可能的-DNS无法做到这一点-这是一种简单的DNS-> IP服务,实际URL发生的事情是Web服务器的任务。

在下面的评论之后,我要做的是将DomainA的所有DNS记录引用到DomainB所指向的相同IP(这种方式),这样您就可以将HTTP请求发送到hostB上,这很简单:

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

这会将来自DomainB的所有内容重写为DomainA,可以将其托管在同一服务器或其他位置。我了解第二种选择可能是一项开销,如果可以/允许在apache上创建基于名称的虚拟主机,则不必这样做。

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

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


是的,您正确理解-请在上方查看我的评论。那么哪些DNS条目将有助于实现该目标?主机A上没有网络托管,只有域名托管在其中。我们希望所有到域A的流量都能够解析为域B ...非常感谢您的宝贵时间。
普伦博

这与将ServerAlias添加domain B到现有虚拟主机中相同domain A吗?
BadHorsie

9

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

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

进行此工作的正确方法(从UX和SEO角度而言)是执行从域A到域B的HTTP重定向。

您可以手动配置您的Web服务器(Apache,Nginx,IIS等),如果您在技术上有能力的话。网上有很多很好的资源可以帮助您解决此问题。

如果您不能或不想控制基础结构,则可以使用URL重定向服务来为您执行此工作。我是一个名为EasyRedir的创始人,但肯定还有其他人。


5

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

如果希望访问B时B出现在浏览器中(可选,并且与DNS不相关),则需要匹配HTTP主机并在Web服务器上重定向请求。使用Apache,您可以在虚拟主机定义中使用mod_rewrite做到这一点:

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

0

当然,可以使用以下技巧进行重定向:

  1. 创建一个新的标准主要区域
  2. 将其命名为您要重定向到的虚拟URL
  3. 确保此虚拟名称与任何AD DNS名称不同
  4. 使用以下条目创建A记录:

空白....................... A ..................................... ... ip-addr-2

www .......................................... A ............................... ..... ip-addr-2

本质上,这里我们是重定向。一个有效的URL将根据现有的DNS主DNS区域进行解析。虚构的URL将被重定向到ip-addr-2。重要的是该条目的名称为空,因此它将落入记录中的下一个条目并重定向到ip-addr-2


-1

我没有尝试过,但是我认为您可以这样做:

DomainA.com. CNAME DomainB.com.

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

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


我不相信这会重定向子域的解析,尽管您省去了SOA。DNAME被设计为执行此操作,但是由于某些原因,没人知道,CNAME和DNAME是互斥的。
Falcon Momot

2
您不能将CNAME记录放置在像这样的裸/顶点域上domain.com,但是可以将记录放置在像www.domain.com
Petrus Theron

这不会重定向,只会将www.DomainA.com解析为DomainB的IP;并且仅适用于子域(不适用于裸域0>
Wernight
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.