1

我注册了我的域名foo.org,他们还免费给了我foo.biz。我真的不喜欢它,但正如我所说,他们免费给了我......而且我绝对希望将涉及foo.biz的每个请求路由到foo.com,包括子域。

foo.org的 DNS 配置中,我将@www以及通配符子域*设置为我主机 IP 地址的A记录,

对于foo.biz的 DNS 配置,我正在考虑使用 301 重定向,但它们不能很好地与通配符子域配合使用,或者至少我不知道如何实现我想要的自动映射,即,不必这样做手动为每个子域,不要在没有通配符的情况下使用。

由于我真的想让foo.org成为规范名称并将foo.biz用作廉价别名,因此使用 CNAME 记录是有意义的,但我怎样才能做到这一点以实现映射?

我会很感激你最受过教育的建议!

4

2 回答 2

2

您不能通过简单地使用 DNS 来做到这一点。当然,您可以将*.foo.biz的 CNAME 记录设置为foo.org,但是当用户在浏览器的地址栏中键入foo.biz时,这不会使浏览器请求foo.org 。您必须在 HTTP 服务器级别使用重定向来实现此目的。

为什么?

为了清楚起见,让我们看一下 stackoverflow.com 的 DNS 设置:

~# dig www.stackoverflow.com
;; QUESTION SECTION:
;www.stackoverflow.com.         IN     A

;; ANSWER SECTION:
www.stackoverflow.com.   300    IN     CNAME   stackoverflow.com
stackoverflow.com.       24     IN     A       192.252.206.16

正如我们所见,stackoverflow.com 是 www.stackoverflow.com 的规范名称。但是,如果我在浏览器的地址栏中输入 www.stackoverflow.com,它将向 192.252.206.16 发送以下请求

GET / HTTP/1.1
Host: www.stackoverflow.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

有趣的是,Chrome 可能已经查看了 StackOverflow 的 DNS 配置,并且可能已经看到stackoverflow.com是该服务器的规范名称,但它仍然在标头字段中发送www.stackoverflow.com 。Host这允许管理员在一台物理机器上托管多个站点(基于名称的虚拟主机)。

但是,192.252.206.16 的服务器响应我的请求

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: http://stackoverflow.com/
Date: Mon, 16 Sep 2013 11:00:43 GMT
Content-Length: 148

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://stackoverflow.com/">here</a></body>

从而将我重定向到 stackoverflow.com。

HTTP 服务器配置

为了实现您的映射,您需要在您的 HTTP 服务器配置中添加一些重写规则。对于 Apache,这可能如下所示:

<VirtualHost *:80>
    ServerName foo.biz
    ServerAlias *.foo.biz

    RewriteEngine On

    RewriteCond %{HTTP_HOST} =foo.biz
    RewriteRule ^(.*)$ http://foo.org$1 [L,R=301]

    RewriteCond %{HTTP_HOST} ^(.*).foo.biz$
    RewriteRule ^(.*)$ http://%1.foo.org$1 [L,R=301]
</VirtualHost>

这会将 foo.biz/bar 重写foo.org/bar并将any.foo.biz/something重写any.foo.org/something。不过,您仍然需要 foo.biz 的 DNS 条目和 foo.org 站点的站点配置。

希望有帮助...

于 2013-09-16T12:32:38.593 回答
0

如果您只想从foo.biz重定向到foo.org ,则添加一条A记录以将站点 X 重定向到站点 Y 应该可以解决问题。但是,如果您想要将 foo.biz 的所有别名重定向foo.org 那么这可能会也可能不会,具体取决于您的注册商。您可以尝试通过向CNAME记录添加通配符来做到这一点。如果您的注册商不允许,您可能必须为每个别名添加CNAME记录。例如,由于很多人使用前缀www,因此很常见的添加CNAME记录。根据您的注册商,它应该是这样的:

  Type          Name                 Value

   A           foo.biz       (points to) 123.456.789.0

 CNAME          www          (is an alias of) foo.org

 CNAME          etc          (is an alias of) foo.org

如果注册商接受CNAME记录中的通配符:

  Type          Name                 Value

   A           foo.biz       (points to) 123.456.789.0

 CNAME            *          (is an alias of) foo.org
于 2017-11-25T12:41:26.247 回答