所以我的环境是C#asp.net sitefinity webforms / mvc / webapi hybrid。 我在IIS 7中有一个位于Amazon elb后面的应用程序池。
我在IIS中有一个网站foo.com。我在foo.com上添加了一个名为bar的应用程序。 所以我的其他网站可以通过foo.com/bar访问。
这两个网站工作正常(大部分)。但有时当我访问相同的网址时 这属于foo.com/bar/*我会收到404错误,我在浏览器地址栏上按Enter键 它再次显示出来。 404我很难复制有些时候我得到一个页面渲染,有时我得到404。
我得到的404页面来自foo.com,而不是foo.com/bar。
所以看起来有时foo.com试图解析网址而不是foo.com/bar来解析网址。
我注意到进入elb的https流量被发送到我的应用程序作为http,所以也许elb有时会做一些有趣的事情而不是其他人?
无论如何,要排除故障,我希望我在foo.com上的应用程序忽略对foo.com/bar的所有url请求,所以如果我仍然得到404s,我至少需要来自子应用程序的404页面(foo.com/bar )。
所以我想把这个规则添加到foo.com web.config
<rule name="Ignore bar" stopProcessing="true">
<match url="^.*foo.com/bar/.*" />
<action type="None" />
</rule>
但我不确定该动作是做什么的。 没人做什么?我的意图是让foo.com忽略该网址,如果正则表达式匹配,请让foo.com/bar获取网址。
foo.com/bar处于测试模式,但foo.com是一个实时网站,所以我不想破坏任何东西。
顺便说一下,我的开发环境或暂存环境中没有404到foo.com/bar/*(IIS应用程序的设置格式与实时相同)。
主要区别似乎是亚马逊环境,但我可能错了。
那么我的规则会有效吗?或者,还有更好的方法?
编辑:我不知道这是否相关,但在我的亚马逊实例上,sitefinty显示我有一些HTTP PUT错误(当我猜想elb试图将某些东西放到我的子应用程序中时(foo.com/bar) ,错误是超时)。
编辑2:在https上尝试对WebApi方法(到foo.com/bar)的Get调用时,我总是从foo.com获得404。但http和我的相同网址得到了预期的数据,这似乎始终可以重现。
答案 0 :(得分:0)
尝试执行以下操作。在子应用程序的webconfig上。 (foo.com/bar。)
清除规则,然后定义您需要的内容:
<rules>
<clear />
<!-- Define your subapplication rules if needed -->
</rules>
该语句清除了父应用程序中的所有继承规则。
您可以使用:
<location path="." inheritInChildApplications="false">
父应用程序上的标签之间包装的所有行都不会 继承到子应用程序
答案 1 :(得分:0)
我解决了这个问题。
问题在亚马逊ELB之上,我们有另一个akamai负载均衡器。 Akamai正在缓存某些网址并将它们发送到错误的服务器,因此我们得到了404,因为子应用程序不在Akamai发送请求的服务器上。
清除了Akamai缓存,现在所有请求都正在运行/命中正确的服务器和应用程序。
我没有在我的问题中包含这些信息,因为我不知道实时环境是这样设置的。