所以我的环境是C# asp.net sitefinity webforms/mvc/webapi混合。我在 IIS 7 中有一个应用程序池,位于 Amazon elb 后面。
我在 IIS 中有一个网站 foo.com。我向 foo.com 添加了一个名为 bar 的应用程序。所以我的其他网站可以通过 foo.com/bar 访问。
这两个站点工作正常(大部分情况下)。但有时当我访问属于 foo.com/bar/* 的相同 url 时,我会收到 404 错误,我在浏览器地址栏上按回车,它再次显示。404 很难复制,有时我会渲染一个页面,有时我会得到 404。
问题是我得到的 404 页面来自 foo.com,而不是 foo.com/bar。
所以看起来有时 foo.com 试图解析 url 而不是 foo.com/bar 解析 url。
我注意到进入 elb 的 https 流量作为 http 发送到我的应用程序,所以也许 elb 有时会做一些有趣的事情,但其他时候不会?
无论如何,为了解决问题,我希望我在 foo.com 上的应用程序忽略对 foo.com/bar 的所有 url 请求,所以如果我仍然得到 404,我至少想要来自子应用程序 (foo.com/bar) 的 404 页面。
所以我正在考虑将此规则添加到 foo.com web.config
<rule name="Ignore bar" stopProcessing="true">
<match url="^.*foo.com/bar/.*" />
<action type="None" />
</rule>
但我不确定这个动作是做什么的。没有人做什么?我的意图是让 foo.com 忽略 url,如果匹配正则表达式,让 foo.com/bar 获取 url。
foo.com/bar 处于测试模式,但 foo.com 是一个实时站点,所以我不想破坏任何东西。
顺便说一句,在我的开发或登台环境(IIS 应用程序的设置格式与实时相同)中,我没有得到 foo.com/bar/* 的 404。
主要区别似乎是亚马逊环境,但我可能是错的。
那么我的规则会起作用吗?或者,还有更好的方法?
编辑:我不知道这是否相关,但在我的亚马逊实例上,sitefinty 显示我有一些 HTTP PUT 错误(当我猜想 elb 试图将某些东西放入我的子应用程序(foo.com/bar)时,错误是超时)。
编辑 2:当尝试在 https 上对 WebApi 方法(到 foo.com/bar)进行 Get 调用时,我总是从 foo.com 得到 404。但是 http 上的相同 url 和我得到了预期的数据,这似乎是一致的可重现的。