2009-06-08 37 views
0

我有一個ASP.NET頁面來處理「404頁面找不到」,它的設置是通過在我的web.config文件中配置<customErrors>部分並在IIS管理器中爲404錯誤設置自定義錯誤頁面。你如何重定義ASP.NET頁面中的超鏈接和內容?

它按照我的網站的根頁面的預期工作,但不在網站的子目錄中工作 - 我的自定義錯誤頁面中的超鏈接和內容具有錯誤的網址庫。

我的錯誤頁面中的所有鏈接都是服務器端控件(runat =「server」),並且其鏈接基於「〜/」。

當我瀏覽與http://mysite/nosuchfolder/nosuchfile網站頁面呈現與思考它被從根擔任,而從nosuchfolder,因此所有的環節都在瀏覽器中瀏覽器打破從nosuchfolder立足鏈接的鏈接。

有什麼辦法可以'告訴'ASP.NET頁面重新鏈接不同文件夾/文件名的鏈接嗎?

注:

  • 大多數頁面模板是從母版頁呈現
  • 我運行IIS6並且已經設置了自定義錯誤404網址:/error404.aspx
  • 在我的web.config文件我已將<customErrors>部分配置爲重定向到/error404.aspx
  • 作爲解決方法,我在頁面中使用HTML <base>標記,但我想要避免此問題
  • 我不希望有改變這一切我的「〜/」基於鏈接到「/」或在線破解基礎

回答

0

斯科特谷的URL重寫把我在正確的道路(這麼說!)上的文章 - 謝謝你的提示詹姆斯。

的答案是使用Context.RewritePath(newPath)

這是我在自定義404頁,使用代碼 -

protected override void Render(HtmlTextWriter writer) 
{ 
    string rebase = Server.UrlDecode(Request.ServerVariables["QUERY_STRING"]); 

    if (rebase.Length>10 && rebase.StartsWith("404;")) 
    { 
     try 
     { 
      rebase = new Uri(rebase.Substring(4)).AbsolutePath; 
     } 
     catch 
     { 
      rebase = "/"; 
     } 
     finally 
     { 
      Context.RewritePath(rebase); 
     } 
    } 

    base.Render(writer); 
    Response.StatusCode = 404; 
} 

處理缺失以同樣的方式.aspx頁,存在web.config設置所謂redirectMode你設置爲ResponseRewrite

<customErrors mode="On" redirectMode="ResponseRewrite"> 
    <error statusCode="404" redirect="~/error404.aspx" /> 
</customErrors> 

這將停止重定向的默認行爲用戶爲~/error404.aspx?aspxerrorpath=badfile

注意:此設置是最新的ASP.NET服務包的新增功能(例如,框架3。5 SP1)

MSDN Reference for redirectMode

0

當您設置UO夜custome錯誤頁面,使用重定向或URL它重寫?在ASP.NET中實現URL重寫時,您描述的問題是一個常見問題。本質上,在URL重寫中,處理器不清楚URL在解析時使用哪個URL。如果有關於如何解決問題的文章/帖子,請寫一個數字。

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

http://searchengineland.com/url-rewriting-custom-error-pages-in-aspnet-20-12234

+0

感謝詹姆斯,我沒有使用任何URL重寫 - 剛剛在IIS和我的web.config重定向。儘管我會閱讀這些頁面 – Alex 2009-06-08 14:51:56