问题

问题

问题

我们当前有两个 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 错误,具体来说:

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.configother仍然看到相同的行为。

我也用尽了其他可能的解决方案:

还有什么原因导致此情况?如能提供任何指点,我将不胜感激。

答案1

经过进一步挖掘并再次与开发人员协商后other,我想我们已经解决了这个问题。

基本上,网站托管server.com全部其中参与重写的应用程序(common以及和foo直到bar我们准备删除它们)需要在同一个 IIS 应用程序池中运行。

我已经调整了我们的部署流程以解决这个问题。我们使用 Octopus,因此归根结底只需在每个项目中更改一个变量。对于未来的读者,您的流程可能有所不同,但以防万一,希望这对其他人有所帮助:

项目变量

相关内容