如何将一个域的所有请求完全重定向到另一个域?

时间:2012-10-30 03:36:45

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

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

所以我联系了godaddy,他们说他们无法阻止某人将自己的域名指向我的专用IP地址。我认为这是真的,是的,这取决于域名所有者。 现在,我需要实现一种机制,可以将该奇怪域的所有请求重定向到我自己的域,而不会让访问者知道它。即:如果访问者正在请求 www.strange-domain.com/some/path/to/page ,然后他将被重定向到 www.my-domain.com/some/path/to/page 如果无法做到这一点,至少应将访问者重定向到我的域名主页: www.strange-domain.com

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

另外,由于我的网站由.NET MVC3提供支持,如果网址重写不起作用,我想知道我是否可以使用某些.NET MVC3功能,例如路由系统,Global.asax。 ..如果两者都可以实现这一目标,哪一个是首选,为什么:)这么多问题,谢谢大家提前!:)

UPDATE1: 现在,我有以下重写规则。

<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前缀)和strange-domain.com(也没有带有wwww)的请求现在都会出现以下错误:

enter image description here 你能告诉我其他任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

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

静态资产(如图像,javascript文件和样式表)可能无法始终在ASP.NET中提供,并且ASP.NET中的任何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地址,因此您需要考虑应用程序如何处理该域名。