在回答关于SO的另一个人问题时,我发现在我的全局重定向代码中存在一个小“错误”。URL重写和301重定向...重定向到原始URL
我已经把一个全局类连接到一个HttpModule。它的工作是检测“http:/ www。”在URL中并将用户重定向到NON 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)
不是我想反正这样做,因为这是一个黑客,但它并没有反正工作。
任何意见,将非常感激!
产生相同的行为与我原来的代码的答案。 – 2010-02-18 18:30:17
@rockinthesixstring - 你有一个测试页面,所以我可以看到它发送的头文件? – 2010-02-18 18:39:56
是的,http://staging.infinitas.ws:83/ – 2010-02-18 18:44:02