我有一個網站託管在安裝了URL Rewrite module 2.0的IIS 7上。它由內容管理系統運行,查看URL並在當前用戶無權查看頁面時返回401錯誤。這被ASP.NET URL授權模塊接收,然後按照web.config
文件(表單身份驗證)中指定的方式將頁面踢到loginUrl頁面。具有URL重寫模塊2.0的IIS 7 - 設置401狀態代碼和ReturnUrl
這工作完全在我的本地機器上 - 這是IIS 7和Windows 7
如果URL,比如,/612/some-string
用戶獲取對/66/login?ReturnUrl=/612/some-string
定向到登錄頁面。
URL重寫將查看文檔ID的URL的第一部分。真正的URL是這樣的:index.aspx?documentId=612
不幸的是,當我將它部署到我們的登臺服務器時,ReturnUrl不是重寫的URL,而是原始URL。這會導致各種問題。
登臺服務器也是安裝了URL Rewrite Module 2.0的IIS 7。它是Windows 2008服務器SP2。兩者都運行ASP.NET 3.5。
我唯一的猜測是machine.config
文件以不同的方式排列默認的httpModules,.NET表單驗證模塊在URL被重寫之前跳入。
我會盡快審查,但在此期間,這個問題的經驗是什麼,它可以解決?
更新
我也試圖改變
Response.StatusCode = 401;
到
FormsAuthentication.RedirectToLoginPage();
這讓我有點超前,但還是引導用戶回到那個已經不是網址被重寫。
我也能做到這一點,而不是設置了401:
string currentPage = HttpUtility.UrlEncode(Request.RawUrl);
string loginUrl = FormsAuthentication.LoginUrl + "?ReturnUrl=" + currentPage;
Response.Redirect(loginUrl);
但這似乎難看。
任何決議對此? – iambriansreed 2013-06-20 13:36:43