【发布时间】:2023-04-03 22:20:02
【问题描述】:
我有一个安装在 IIS 7 上的网站,并安装了 URL Rewrite module 2.0。它由查看 URL 的内容管理系统运行,如果当前用户无权查看页面,则返回 401 错误。这由 ASP.NET URL 授权模块获取,然后将页面跳转到 web.config 文件中指定的 loginUrl 页面(表单身份验证)。
这在我的本地机器上完美运行 - 这是 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 重写模块 2.0 的 IIS 7。它是 Windows 2008 服务器 SP2。两者都运行 ASP.NET 3.5。
我唯一的猜测是machine.config 文件对默认 httpModules 的排序不同,并且 .NET 表单身份验证模块在 URL 被重写之前就开始了。
我会尽快复习,但与此同时,这个问题的经验是什么,可以解决吗?
更新
我也尝试过改变
Response.StatusCode = 401;
到
FormsAuthentication.RedirectToLoginPage();
这让我有点领先,但仍将用户引导回尚未重写的 URL。
我也可以这样做,而不是设置 401:
string currentPage = HttpUtility.UrlEncode(Request.RawUrl);
string loginUrl = FormsAuthentication.LoginUrl + "?ReturnUrl=" + currentPage;
Response.Redirect(loginUrl);
但这看起来很难看。
【问题讨论】:
-
有什么解决办法吗?
标签: asp.net iis-7 url-rewriting