遇到了urlrewriter的:无法使用前导.. 在顶级目录上退出问题
- Intelligencia.UrlRewriter 2.0 RC1 beta 6
- .net framework 2.0
- visual studio 2008
- iis6
 
-  正好要做地址重定向的項目,在http://urlrewriter.net/上下載了最新的代碼和類庫。 好像有些時候沒有更新了,加之asp.net mvc的出現,這個功能要被整合到.net框架之中了,但由于還沒有升遷到.net3.5,所以還是要借助這個東西來讓URL更容易understand,更clean一些。 本來是引用源代碼在項目之中的,但是配置了web.config運行以后,雖然實現了頁面重定向,但是地址欄里的地址顯示出來的是定向目標的地址而不是重定向前的地址:( 后來直接引用編譯后的類庫:把Intelligencia.UrlRewriter.dll復制到網站bin目錄下并引用,修改web.config后實現重定向功能。 這個新版本有另外的新功能:就是可以在url中寫入條件語句來重定向(這可是寫在web.config里面的,汗): <rewriter> 
 ??? <if url="/tags/(.+)" rewrite="/tagcloud.aspx?tag=$1" />
 ??? <!-- same thing as <rewrite url="/tags/(.+)" to="/tagcloud.aspx?tag=$1" /> -->
 </rewriter>還有類似unless的條件語句: <unless header="HTTP_HOST" match="my.domain.com"> 
 <rewrite url="^/tags/big/(.+)$" to="/big-tag-cloud.aspx?tag=$1" processing="stop" />
 <rewrite url="^/tags/small/(.+)$" to="/tiny-tag-cloud.aspx?tag=$1" processing="stop" />
 <rewrite url="^/tags/medium/(.+)$" to="/normal-tag-cloud.aspx?tag=$1" processing="stop" />
 </unless>現在,問題來了,我的目錄中含有~/news/shownews.aspx的文件,我做如下配置: <rewrite url="~/news/20080324/test.aspx" to="~/news/shownews.aspx" /> 出現: “/”應用程序中的服務器錯誤。無法使用前導 .. 在頂級目錄上退出。說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。 
 異常詳細信息: System.Web.HttpException: 無法使用前導 .. 在頂級目錄上退出。然后想用相對路徑來回避頂級目錄的問題: <rewrite url="~/news/20080324/test.aspx" to="http://www.cnblogs.com/news/shownews.aspx" /> 問題依舊,但是無數次的嘗試有如下發現,當改成這個地址時: <rewrite url="~/news/20080324/test.aspx" to="../news/shownews.aspx" />出現: “/”應用程序中的服務器錯誤。無法找到資源。說明: HTTP 404。您正在查找的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 并確保其拼寫正確。 
 請求的 URL: /news/news/shownews.aspx當然我沒有~/news/news/shownews.aspx這個文件,所以也找不到,但是至少可以不出現500錯誤,于是嘗試: <rewrite url="^/news/test/test.aspx" to="http://www.cnblogs.com/shownews.aspx" /> 這下返回: “/”應用程序中的服務器錯誤。無法找到資源。說明: HTTP 404。您正在查找的資源(或者它的一個依賴項)可能已被移除,或其名稱已更改,或暫時不可用。請檢查以下 URL 并確保其拼寫正確。 
 請求的 URL: /shownews.aspx我不希望我的項目根目錄下有這么多的文件,所以還是又找來其它的文章來分析。 經過分析發現是重名目錄的問題(雖然不知道這算是什么問題)上面有一個出錯的寫法: <rewrite url="~/news/20080324/test.aspx" to="~/news/shownews.aspx" /> 如果這樣寫,就可以正確重定向: <rewrite url="~/news/20080324/test.aspx" to="~/test/shownews.aspx" /> 或是改掉重寫前的地址: <rewrite url="~/test/20080324/test.aspx" to="~/news/shownews.aspx" /> 
????????又不行了,看來urlrewriter可以正確運行,但是頁面中有一些不能解析的東西,按照網上找來的方法,
-  去掉頁面中所有../的連接; 
-  把母版頁轉移動根目錄下; 
-  把控件轉到根目錄下; 
-  。。。盡量避免一切會產生../的組件出現 
?注意:<asp:HyperLink ID="HyperLink_4xAI" runat="server" ImageUrl="/images/logo.gif" NavigateUrl="~/Default.aspx" meta:resourcekey="HyperLink_4xAIResource1">4xAI</asp:HyperLink>
 這個控件,當它位于用戶控件中時,ImageUrl的屬性是如果出現~,還是會報上面的錯誤,只能用絕對地址,至少我的測試結果是這樣:(
下面提供的文章不一并對您有用,不過如果你可能是通過其他的搜索關鍵字來看到這篇文章,可能會對您有所幫助:
在 ASP.NET 中執行 URL 重寫
無法使用前導 .. 在頂級目錄上退出(Cannot use a leading .. to exit above the top directory)
對ASP.Net中URL重寫的疑問
無法使用前導.. 在頂級目錄上退出
Tip/Trick: Url Rewriting with ASP.NET?
技巧/訣竅:在ASP.NET中重寫URL
總結
以上是生活随笔為你收集整理的遇到了urlrewriter的:无法使用前导.. 在顶级目录上退出问题的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: c# GDI+简单绘图(一)
- 下一篇: Windows Server 2008虚
