使用DNS重定向到具有路径的另一个URL

con*_*act 103 dns redirect

我正在尝试通过DNS将域重定向到另一个域.

我知道使用IN CNAME它是可行的.

www.proof.com IN CNAME www.proof-two.com.
Run Code Online (Sandbox Code Playgroud)

我需要的是一个路径重定向.当有人打字时www.proof.com,应该带他们去www.proof-two.com/path/index.htm

我知道可以使用Web Server工具完成,但我需要DNS重定向.

这可能吗?

eud*_*xos 124

不,你问的是不可能的.DNS是名称解析系统,对HTTP一无所知.


小智 82

如果你使用AWS,重定向就像

mail.foo.com --> mail.google.com/a/foo.com
Run Code Online (Sandbox Code Playgroud)

可以设置如下:

  1. 在s3中,创建一个空桶"mail.foo.com"
  2. 在属性 - >静态网站托管下,设置"将所有请求重定向到:mail.google.com/a/foo.com"
  3. 在route53中,创建一个A记录"mail.foo.com"
  4. 启用"别名",并将别名目标设置为"mail.foo.com"存储桶

不是一个纯粹的DNS解决方案,但它的工作原理;)

但要注意,重定向会跳过所有URL参数,例如:...?param1 = value1¶m2 = value2

  • 需要注意的重要事项:必须命名存储桶以匹配重定向到它的主机名.见http://serverfault.com/a/584714/105720 (6认同)
  • 对于任何使用 AWS 的人来说,这是一个很好且非常有用的答案。谢谢!甜蜜的解决方法 (3认同)

小智 29

我意识到这是一个老线程,但FWIW,因为其他人正在寻找一种方法来做到这一点.

虽然dns不理解url的路径部分,但它会理解子域,因此不是:

www.proof.com IN CNAME www.proof-two.com/path/index.htm

你可以使用:

www.proof.com IN CNAME proof.proof-two.com

然后去任何你托管proof-two.com的地方并将它设置为指向proof.proof-two.com到www.proof-two.com/path/index.htm.

〜总有不止一种方法给猫皮肤

  • @Michiel它听起来像一个无用的结构**如果你可以轻松访问`proof-two.com`网络服务器.有时大公司(和官僚机构)使一切都变得复杂得多. (9认同)
  • 这听起来像是一种无用的构造,而不是使proof.proof-two.com指向www.proof-two.com/path/index.htm,您也可以使www.roof.com指向那里,不需要额外的DNS记录。 (2认同)
  • 重定向不是 DNS 的功能。我认为这就是重点。它是一个 HTTP 函数。DNS 将用于将 www.proof.com 指向执行重定向的服务器。但实际上,它可以是任何具有重定向规则的服务器名称,因为重定向是由 Web 服务器在 HTTP 级别处理的。例如,如果您与 Microsoft 签订了从其 Web 服务器进行重定向的协议,则 www.proof.com 可能是 www.microsoft.com 的 CNAME。它只需响应 30x 重定向到 www.proof-two.com/path/index.htm (2认同)

Udl*_*ati 14

我有一个个人项目,可以帮助您解决此问题。这是一个开源重定向解决方案,可让您仅更改DNS设置即可重定向域。项目链接:https : //redirect.center/

要将www.proof.com重定向到www.proof-two.com并保留URL参数,只需在proof.com上设置www DNS条目:

C名称中的www.proof.com www.proof-two.com.opts-uri.redirect.center。

  • 可以通过服务的“.opts-slash”支持路径。功能。将 http://jobs.my-domain.com 重定向到 http://www.my-domain.com/jobs 按如下方式配置您的 DNS 区域:主机记录:jobs 类型:CNAME 至:www.my-domain.com。 opts-slash.jobs.redirect.center (3认同)
  • 那还不是一条完整的路 (2认同)

小智 10

要回答原始问题,不,只有使用DNS才能实现您的想法(就像每个人都说过的那样).除了已经提到的所有内容之外,另一个选择是使用URL重定向服务.这些类型的服务可以使您根据需要配置许多不同类型的URL重定向.例如:

  1. 将域顶点转发到www.子域,反之亦然
  2. 将一组域名转发到一个目的地(用于转发域拼写错误,旧公司名称等)
  3. 将特定域名转发到深层链接的页面(就像OP想要的那样)

执行此操作的服务是EasyRedir.完全披露:我开发了EasyRedir.当然还有其他选择,所以我鼓励你去看看.


小智 9

使用redirect.center真的很容易

如果要创建CNAME,请执行以下操作:

www.proof.com IN CNAME www.proof-two.com/path/index.htm

使用redirect.center将您的CNAME看作规范模式:

www.proof.com IN CNAME www.proof-two.com.opts-slash.path.opts-slash.index.htm.redirect.center.

现在,如果您想重定向到https网站,可以添加以下选项:

www.proof.com IN CNAME www.proof-two.com.opts-slash.path.opts-slash.index.htm.opts-https.redirect.center.

现在,您可以在命运页面中使用带斜杠的规范模式创建CNAME.


Gab*_*iel 8

编辑

似乎是我的提供商(OVH)在其基础架构中允许这种重定向.

请参阅:https://www.ovh.com/fr/g1339.redirection-nom-de-domaine

我为了存档而保留下面的答案,但它没有提供任何有意义的信息.

原始答案

我使用TXT记录做到了这一点.

要重定向foo.bar.comfoo2.bar.com/path,只需添加foo IN TXT "1|foo2.bar.com/path"在您的bar.comDNS区域.

它还保留url路径和参数.因此,如果您尝试访问foo.bar.com/hello?foo=bar,您将被重定向到foo2.bar.com/path/hello?foo=bar.

  • 你能再多一点了吗?您对如何使用TXT记录有任何参考吗? (5认同)

Man*_*ddy 7

相关工作总结如下:

问题:

http://a.com/p1/p2.html今天 应该转到 http://B.com/p1/p2.html
,但稍后手动/自动配置时,会转到相同的
http://a.com/p1 /p2.html 应该转到 http://C.com/p1/p2.html

答案:

DNS - 将名称转换为 IP 地址

虽然它可以做很多重定向,但总是输出 IP 地址 DNS 不理解 URL 的路径或协议部分,只理解域部分,即 a.com 只转换为 IP 地址,因此当您点击http 时: //a.com/p1/p2.html可能会被转换为http://152.132.121.11/p1/p2.html 如果你的 DNS 配置错误,那么你会得到 152.132.121.11 (而不是http://152.132.11) 121.11/p1/p2.html),所以你会得到一些 400 错误(400、403 等)

重定向- 这是http://a.com/p1/p2.html可以转换为http://b.com/p1/p2.html

所有的方法,如 GET、POST 都可以工作,如果有 headers 和 body,但是涉及到一个 Web 服务器,它可能是故障点,所以可扩展性和可用性将是关键

如果您在AWS上,则可以通过自定义域在内部使用云前端进行 Route 53 -> API 网关

可以使用 Amazon Certification Manager、AWS Gateway 自定义域和 Route53,请注意 ACM 上的 us-east-1 限制

希望对某人有帮助


Kar*_*ker 5

DNS不会重定向URL的路径部分,因此无法实现.

添加

www.proof.com IN CNAME www.proof-two.com
Run Code Online (Sandbox Code Playgroud)

将直接访问www.proof.com并访问www.proof-two.com,您需要使用Web服务器配置将用户引导至相应的页面.


chr*_*ian 5

我假设您有这种情况:您有一个独特的网络服务器托管各种网站,每个网站都应该由一个单独的域呈现:

因此,page1.html 应该由www.customer1.com等提供服务。

  1. example.com dns 服务器(您的网络服务器)中创建一个子域:

    customer1.example.com

  2. 在您的 apache 虚拟服务器设置中,将子域映射到包含您的客户 #1 的网站的目录,如下所示:

<VirtualHost *:80> SetEnv PAGE_ID "customer1" ServerName customer1.example.com ServerAlias www.customer1.com DocumentRoot /your/local/path/webserver/customer1 </VirtualHost> 请注意“ServerAlias”的值,这对下一步很重要-

此时,您应该能够通过浏览以下内容导航到您的 customer1 网站:

customer1.example.com

  1. 在 customer1.com 的 DNS 设置中,您必须创建 CNAME 记录:

    CNAME=www LOCATION=customer1.example.com

现在,您可以使用:www.customer1.com。


小智 5

我对这个问题的解决方案非常简单直接。您所需要的只是在域内运行的 IIS 服务器。

在 DNS 中设置 CNAME 以指向 IIS 服务器,使用 IIS 中的主机名解析单个 IIS 服务器上的多个站点。我使用同一台 IIS 服务器将一些子域外包给外部站点。

然后在 IIS 设置中设置重定向,使该站点转到您的场外站点/路径,在我的例子中,我希望 Catalog.ourdomain.com 转到我们的托管目录。从这里开始,所有的调整都是在 IIS 中完成的。请务必启用匿名身份验证,以免流量被阻止。


nyx*_*yxz 5

虽然几乎每个人都已经说过 - 仅使用 DNS 是不可能的。作为一种解决方法,我建议尝试 NGINX ( http://nginx.org/en/docs/http/request_processing.html )。

TL;DR - 在 NGINX 中,您可以创建多个虚拟服务器,它们可以根据服务器名称(“主机”标头)重定向您的请求。

前任。http://my-x.com重定向到 Twitter,http://my-fb.com重定向到 Facebook,而两者共享一台物理服务器。

server {
    listen      80;
    server_name my-x.com;
    return 301 https://twitter.com/my-twitter-handle
}

server {
    listen      80;
    server_name my-fb.com;
    return 301 https://facebook.com/my-fb-hanlde
}

Run Code Online (Sandbox Code Playgroud)