我们目前正在Windows 2012 R2上提供两个IIS项目,IIS8.5如下所示:
foo上的server.com/foobar上的server.com/bar然而,这些项目的代码几乎相同,因此我们正在整合它们。理想情况下,我们应该
common上的server.com/common (只能在内部使用)^foo(.*)$→common{R:1},因此它似乎托管在server.com/foo上。^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之外,还有一些东西会阻止为common提供服务。
这里令人困惑的是,还有另一个应用程序在将/baz和/qux重写到共享应用程序/other时做了类似的事情。如果我指出^foo(.*)$→other{R:1},它可以正常工作(当然,它执行错误的应用程序代码)。我无法确定这两个应用程序之间的任何其他相关差异会导致这种情况。实际上,我从other复制了几乎所有的D48文件,并且仍然看到了相同的行为。
我也用尽了其他可能的解决方案:
还可能是什么原因造成的?我希望你能给我指点。
发布于 2019-06-06 18:12:44
在深入研究并再次与other背后的开发人员进行磋商之后,我认为我们已经解决了这个问题。
基本上,托管server.com和<#>所有将参与重写的应用程序(common,以及foo和bar,直到我们准备删除它们)的站点都需要在同一个IIS应用程序池中运行。
我已经调整了我们的部署过程,以说明这一点。我们使用八达通,所以它可以归结为在每个项目中只改变一个变量。对于未来的读者来说,您的过程可能有所不同,但以防万一,希望这能帮助到其他人:

https://serverfault.com/questions/970404
复制相似问题