【问题标题】:URL Rewriting and 301 Redirect... Redirects to the original URLURL 重写和 301 重定向... 重定向到原始 URL
【发布时间】:2011-01-18 10:51:41
【问题描述】:

在回答其他人关于 SO 的问题时,我发现我的全局重定向代码中有一个小“错误”。

我已将一个全局类连接到一个 HttpModule。它的工作是检测“http:/www”。在 URL 中并将用户重定向到非 www。版本

Protected Sub OnBeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    'Force Removal of WWW
    Dim application As HttpApplication = TryCast(sender, HttpApplication)
    Dim url As Uri = application.Context.Request.Url
    Dim hasWWW As Boolean = If(url.ToString.StartsWith("http://www."), True, False) 'UrlRegex.IsMatch(url.ToString())
    If hasWWW Then
        Dim newUrl As [String] = UrlRegex.Replace(url.ToString(), [String].Format("{0}://", url.Scheme))
        application.Context.Response.Redirect(newUrl, False)
        application.Context.Response.StatusCode = 301
        application.Context.Response.End()

    End If

End Sub

我遇到的问题是,当它重定向页面http://www.example.com/AboutUs 时,目标是让它转到http://example.com/AboutUs(重写的页面),但它会转到http://example.com/Default.aspx?Slug=AboutUs(原始页面)。

我尝试通过更改进行一些修改

    Dim newUrl As [String] = UrlRegex.Replace(url.ToString(), [String].Format("{0}://", url.Scheme))
    application.Context.Response.Status = "301 Moved Permanently"
    application.Context.Response.AddHeader("Location", newUrl.Replace("Default.aspx", "")) 

    Dim newUrl As [String] = UrlRegex.Replace(url.ToString(), [String].Format("{0}://", url.Scheme))
    newUrl = newUrl.Replace("Default.aspx?Slug=", "")
    newUrl = newUrl.Replace("Default.aspx", "")
    application.Context.Response.Status = "301 Moved Permanently"
    application.Context.Response.AddHeader("Location", newUrl) 

无论如何我都不想做,因为它是一个黑客,但它无论如何都不起作用。

对此的任何建议将不胜感激!

【问题讨论】:

    标签: asp.net vb.net http-status-code-301 url-rewriting


    【解决方案1】:

    而不是这个:

    application.Context.Response.Status = "301 Moved Permanently"
    application.Context.Response.AddHeader("Location", newUrl) 
    

    试试这个:

    application.Context.Response.Redirect(newUrl, false)
    application.Context.Response.StatusCode = 301
    application.Context.Response.End()
    

    【讨论】:

    • @rockinthesixstring - 你有一个测试页面,所以我可以看到它发送的标题?
    • rockinthesixstring - 你能在下面给我一个应该重定向我的页面吗?
    • 每个导航链接都被重写。因此,如果您单击“联系我们”,则链接为staging.infinitas.ws:83/Contact-Us ... 如果您手动附加 WWW。在它前面然后按[enter],你会看到不正确的地址(staging.infinitas.ws:83/Default.aspx?Slug=Contact-Us
    • @rockinthesixstring - 仍然无法测试...因为您的全局脚本会检查 url 是否以 www 开头,所以我尝试了:infinitas.ws/Contact-Usstaging.infinitas.ws/Contact-Us,每个都在端口 80 和 83 上。 . 问题是因为您的重定向代码包含在If hasWWW Then 中,所以它不会在暂存时运行?
    • 我似乎无法远程访问它,我必须等我回到办公室才能访问它。
    【解决方案2】:

    使用 IIS 并设置不同的网站。做一个永久重定向,保留网址。

    【讨论】:

      【解决方案3】:

      尝试使用 Request.RawUrl,例如

      Dim newUrl As [String] = UrlRegex.Replace(Request.RawUrl.ToString(), [String].Format("{0}://", url.Scheme))
      

      Request.RawUrl 应该是来自实际 http 请求的原始 URL。

      【讨论】:

        【解决方案4】:

        这是有效的答案

            Protected Sub OnBeginRequest(ByVal sender As Object, ByVal e As EventArgs)
                'Force Removal of WWW
                Dim application As HttpApplication = TryCast(sender, HttpApplication)
                Dim url As Uri = application.Context.Request.Url
                Dim hasWWW As Boolean = If(url.ToString.StartsWith(String.Format("{0}://www.", url.Scheme)), True, False)
                Dim forceWWW As Boolean = Boolean.TryParse(ICMS.Site.Settings.GetSettingsValue("ForceWWW"), False)
                'UrlRegex.IsMatch(url.ToString())
                If hasWWW Then
                    Dim newUrl As String = UrlRegex.Replace(url.ToString(), String.Format("{0}://", url.Scheme))
                    application.Context.Response.Redirect(newUrl.Replace("Default.aspx?Slug=", String.Empty), False)
                    application.Context.Response.StatusCode = 301
                    application.Context.Response.End()
                End If
        
            End Sub
        

        【讨论】:

          猜你喜欢
          • 2016-09-28
          • 2013-01-27
          • 1970-01-01
          • 2016-05-11
          • 2013-12-21
          • 2015-03-04
          • 2012-04-15
          • 2023-03-25
          • 2011-09-01
          相关资源
          最近更新 更多