我正在使用Intelligencia's URL Rewriter .NET HTTPModule重寫URL。我正在使用其自定義變換功能,該功能允許我提供包含執行實際URL變換的方法的程序集。.NET中的URL重寫對於無Cookie會話的行爲非常不利
我開啓了無Cookie會話,這對URL重寫器造成了一些干擾。
所以,讓我們說,我的服務器上的路徑是這樣的:
http://www.foobar.com/actualPath/index.aspx
但我想使用URL重寫,使路徑是這樣的:
http://www.foobar.com/rewrittenPath/index.aspx
我做了一個腳本輸出以下內容:
- Request.Url(從我的代碼隱藏)
- Request.RawUrl(從我的代碼隱藏)
- document.location(from javascript)
我鍵入以下爲我的地址欄:
http://www.foobar.com/rewrittenPath/index.aspx
當我Cookie會話關閉,一切正常,因爲它應該。我的腳本輸出以下值:
- Request.Url顯示爲http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl顯示爲/rewrittenPath/index.aspx
- document.location顯示爲http://www.foobar.com/rewrittenPath/index.aspx
- 該URL的地址酒吧保持不變,從我原本輸入英寸
但是,當我啓用cookieless會話,事情出錯。我的腳本輸出以下值:
- Request.Url顯示爲http://www.foobar.com/actualPath/index.aspx
- Request.RawUrl顯示爲/actualPath/index.aspx
- document.location顯示爲http://www.foobar.com/actualPath/index.aspx
- 該URL的地址扎因某種原因改變了,所以它顯示爲:
http://www.foobar.com/(S(SESSIONID))/actualPath/index.aspx
但是,這是奇怪的事情 - 在頁面永遠只能觸發一次OnLoad事件。那麼這裏發生了什麼? .NET是否做頁面重定向,但是在OnLoad事件有機會觸發之前這樣做?
我想要做的是保持rewritePath在地址欄中。我想document.location返回rewritePath。我希望Request.RawUrl返回rewritePath。這可能與無cookie會話?或者.NET的無cookie會話機制使這種行爲變得不可能?
謝謝你的時間和幫助。
那麼,我的網址映射是真的接受,不應該影響URL重寫。看來正在發生的事情是,.NET不僅僅將會話ID粘貼到URL中。它也在做某種頁面重定向到'實際'路徑(而不是重寫或'原始'路徑)。這會導致'實際'路徑出現在地址欄中,並且它會導致JavaScript具有'實際'路徑在document.location裏面。如果.NET只是將會話標識卡入'原始'路徑而不從'原始'路徑重定向到'實際'路徑,我希望它。你知道這是可能的嗎? – user44701 2009-07-24 00:05:26