问题
我们当前有两个 ASP.NET MVC 项目由带有 IIS 8.5 的 Windows Server 2012 R2 提供,如下所示:
foo
主办server.com/foo
bar
主办server.com/bar
但是,这些项目的代码几乎相同,因此我们正在整合它们。理想情况下,我们应该
common
托管于server.com/common
(仅供内部使用)- IIS 重写规则
^foo(.*)$
→common{R:1}
因此出现举办于server.com/foo
- IIS 重写规则
^bar(.*)$
→common{R:1}
因此出现举办于server.com/bar
我们已经建立了新的通用项目,并且它在 上运行良好server.com/common
,但是,当我们启用重写规则时,任何尝试导航到server.com/foo
或 的内容/bar
都会产生 403 错误,具体来说:
故障排除
我很确定这不是我的模式/替换字符串的问题,因为如果我将规则类型更改为Redirect
,它会生成所需的目标 URL。
如果我创建 IIS 重写规则^common/test(.*)$
→common{R:1}
那么common
代码可以正确运行,但是^common-test(.*)$
→common{R:1}
会失败,因此某物阻止common
从任何 URL 提供服务以外 /common
。
令人困惑的是,另一个应用程序执行了类似的事情,并被/baz
重写/qux
为共享应用程序/other
。如果我指向^foo(.*)$
→,other{R:1}
它会正常工作(当然,它会执行错误的应用程序代码)。我无法确定这两个应用程序之间会导致这种情况的任何其他相关差异。事实上,我复制了几乎所有文件,Web.config
但other
仍然看到相同的行为。
我也用尽了其他可能的解决方案:
- IIS URL 重写:403-禁止:拒绝访问- 要求整个网站都禁用 SSL;我们在入口处处理 SSL。此外,对于所有这些应用程序,我们仅使用匿名身份验证。
- 无法从 .Net 4.5 网站获取除 403 之外的任何信息- 我启用了此选项,但没有看到任何变化。
还有什么原因导致此情况?如能提供任何指点,我将不胜感激。