【发布时间】: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