【问题标题】:how to completely redirect all requests for one domain to another?如何将一个域的所有请求完全重定向到另一个域?
【发布时间】:2012-10-19 09:30:15
【问题描述】:

我有一个托管在 godaddy(豪华 4GH 计划)上的 .net mvc3 网站,使用 SSL 和专用 IP 地址(173.201..)最近,我注意到有一个奇怪的域(让我们比如说 www.strange-domain.com)也指向我的专用 IP 地址(173.201..)。也就是说,除了我自己的域(比如说,www. my-domain.com),这个新的陌生域也可以访问我网站(我的应用程序)的每个部分,包括管理区域!我真的不希望发生这种事情,因为对于 SEO,搜索引擎可能认为两个域指向同一个站点是一种作弊。

所以我联系了godaddy,他们说他们无法阻止某人将他自己的域指向我的专用IP地址。我认为这是真的,是的,这取决于域所有者。 现在,我需要实现一种机制,可以在访问者不知情的情况下将那个陌生域的所有请求重定向到我自己的域。那就是:如果访问者正在请求 www.strange-domain.com/some/path/to/page ,然后他将被重定向到 www.my-domain.com/some/path/to/page > 好吧,如果这不能完成,至少应该将访问者重定向到我的域的主页:www.strange-domain.com

我知道这可能是通过 IIS url 重写来完成的。我尝试过但失败了。我真的不擅长这样做。那么您可以通过给我一个详细的实现来帮助我吗?

另外,由于我的网站是由 .NET MVC3 驱动的,如果 url 重写不起作用,我想知道我是否可以使用一些 .NET MVC3 功能来做到这一点,例如路由系统,Global.asax .. ..如果两者都可以做到这一点,哪个是首选,为什么:)这么多问题,提前谢谢大家!:)

更新1: 现在,我有以下重写规则。

<rewrite>
<rules>
    <rule name="Redirects to www.my-domain.com" patternSyntax="ECMAScript" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAny">
            <add input="{HTTP_HOST}" pattern="^www.my-domain.com$" negate="true" />
        </conditions>
        <action type="Redirect" url="http://www.my-domain.com/{R:0}" />
    </rule>
</rules>

我认为它现在正在生效,因为对 my-domain.com(没有 www 前缀)和奇怪的 domain.com(也没有 wwww)的请求现在都出现以下错误:

你能给我其他的想法吗?谢谢!

【问题讨论】:

  • 如果您无法控制另一个域名并且您担心它,最好为通过该域进入的所有请求返回 404,恕我直言。而且,如果有人将他们的域名指向您的服务器,您为什么要担心 Google 的想法?安全应该是您最关心的问题。
  • 是的,我知道。我只是想知道这个安全漏洞的解决方案...你能给我一些建议吗?
  • 确保正确配置主机标头。请参阅this link 了解更多信息。

标签: asp.net-mvc-3 iis redirect url-rewriting dns


【解决方案1】:

在您的情况下,最好使用 IIS URL 重写,而不是 MVC3 中的任何内容,因为 IIS 中的 URL 重写引擎会在请求到达 ASP.NET 之前对其进行处理。

图像、javascript 文件和样式表等静态资产可能并不总是在 ASP.NET 中提供,并且 ASP.NET 中的任何 URL 重定向都不起作用。

要全局重定向所有与所需服务器 URL 不匹配的请求,请参阅 this link

本质上,您想要配置一个 条件,其中 {HTTP_HOST} 匹配模式 ^www.my-domain.com$

生成的配置应如下所示:

<rewrite>
    <rules>
        <rule name="Redirects to www.my-domain.com" patternSyntax="ECMAScript" stopProcessing="true">
            <match url=".*" />
            <conditions logicalGrouping="MatchAny">
                <add input="{HTTP_HOST}" pattern="^www.mydomain.com$" negate="true" />
            </conditions>
            <action type="Redirect" url="http://www.my-domain.com/{R:0}" />
        </rule>
    </rules>
</rewrite>

此外

当您说其他域可以访问您网站的所有区域(包括您的管理区域)时,您肯定是指他们只能看到授权页面,而不是他们绕过您的授权 - 在这种情况下,您需要认真查看在您的安全。

本质上,您无法阻止有人将域指向您的 IP 地址,因此您需要考虑您的应用程序如何处理它。

【讨论】:

  • asafb,感谢您的回答。但我只是将您的 xml 代码放入我的 web.config(当然替换为我的真实域)。但似乎没有任何改变。当请求奇怪的域时,我没有重定向到我的真实域。你有什么想法吗?谢谢你..
  • 我还注意到,如果我只是将您的 xml 代码粘贴到 下,那么什么都不会发生,因为我没有触摸 web.config 。但是如果我删除 元素在 元素之间,然后我会从 godaddy 收到 500 服务器错误。
  • +1 表示“另外”。我还要补充一点,使用主机标头是朝着正确方向迈出的一步——尽管如果“包括管理区域”意味着未经适当授权的访问,它并不能拯救你……
  • 已编辑配置示例,将 globalRules 更改为规则。事实证明 globalRules 需要出现在您的全局网络服务器配置中。将上述代码粘贴到您的本地 web.config 中(在根站点,而不是在子应用程序中)将允许规则工作
  • 感谢 asafb。我实际上按照您刚才所说的做了(将全局规则更改为规则)。但是现在还有另一个问题。在 url 重写之前,我可以使用或不使用域的 www 前缀访问我的站点。但现在改写后,我只能用 www.my-domain.com 访问我的网站,my-domain.com 和奇怪的domain.com 都无法访问。我尝试添加另一个添加 www 的规则域的前缀。但它失败了。我不断得到对象引用未设置为对象的实例。错误。我找到了堆栈溢出的规则,所以我猜这个规则是好的。有什么建议吗?
猜你喜欢
  • 2016-02-09
  • 2011-02-15
  • 2013-06-24
  • 1970-01-01
  • 2014-08-28
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多