ASP.NET - 客户端是否可以禁用/忽略301重定向?

时间:2011-01-23 07:22:24

标签: asp.net cross-browser http-status-code-301

我有2个域名可以解析到我的网站www.mysite.com和www.mysitecommonmisspelling.com,以及IP地址。我的Global.asax文件中有一些代码旨在强制所有用户和抓取工具仅使用主域名,如下所示:

    Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)

    'If the domain isn't the correct top level domain for this environment,
    'we want to do a 301 redirect to tell the search engines that this is not the right domain to 
    'index.
    Dim Host As String = Me.EnvironmentHost
    Dim CurrentHost As String = Request.Url.DnsSafeHost

    If CurrentHost.ToLower <> Host.ToLower Then
        Dim Url As String = Request.Url.AbsoluteUri

        'The AbsolutUri property returns the Default.aspx whether it was actually specified
        'in the URL or not. Since our server is set up to respond to this as the default page, 
        'we can safely remove it from the URL if it actually exists. We don't want Default.aspx 
        'indexed anyway if possible.
        Url = Url.Replace("Default.aspx", "")
        Url = Url.Replace("default.aspx", "")

        'Replace the current host with the environment host
        Url = Url.Replace(CurrentHost, Host)


        Response.Clear()
        Response.StatusCode = 301
        Response.Status = "301 Moved Permanently"
        Response.AddHeader("Location", Url)
        Response.End()

    End If

End Sub

我查了一下,谷歌没有在www.mysitecommonmisspelling.com上索引任何页面,所以他们显然很尊重301.但是,几天前我们网站上有一位客户免费送货,因为许可代码是仅在www.mysite.com注册失败(换句话说,浏览器能够访问www.mysitecommonmisspelling.com)。过去,我们遇到了第三方发货组件的问题,因为用户可以使用IP地址访问该网站。

在任何情况下,我们都不希望用户在没有正确域名的情况下访问该站点,因此SSL证书不会抱怨。

我搜索了一种在IE7中禁用301重定向的方法,但似乎没有办法。所以,我想知道的是,是否有任何浏览器可以禁用301,如果有,我可以采取什么样的解决方法来确保我网站上的所有浏览器都进入主域名www.mysite.com? / p>

1 个答案:

答案 0 :(得分:0)

这种类型的重定向确实属于Web服务器,而不是应用程序。对于IIS7,有URL Rewrite Module

您可能希望将IIS设置为托管两个网站,MySite和Misspelling,以便拼写错误永远不会实际访问您的真实网站。只需在该网站上设置重定向即可。

您可能需要检查Server Fault如何正确执行此操作,因为我不是IIS7专家。

关于浏览器忽略它的问题部分:当然,浏览器可以决定不遵循301重定向,但之后它们只会显示一个空白页面。如果有人可以绕过它,那就意味着这一行:

 If CurrentHost.ToLower <> Host.ToLower Then

无效。我不知道浏览器是否可以在访问不同的主机名时发送错误的主机名(尽管有疑问我责备代理,因为它们通常非常奇怪)。