Asp.Net web.config忽略子应用程序的规则

时间:2013-10-09 00:47:38

标签: asp.net asp.net-mvc iis amazon-ec2 sitefinity

所以我的环境是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和我的相同网址得到了预期的数据,这似乎始终可以重现。

2 个答案:

答案 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缓存,现在所有请求都正在运行/命中正确的服务器和应用程序。

我没有在我的问题中包含这些信息,因为我不知道实时环境是这样设置的。