我有一个网站托管在安装了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