1

所以我的环境是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 和我得到了预期的数据,这似乎是一致的可重现的。

4

2 回答 2

0

尝试执行以下操作。在子应用程序的 webconfig 上。(foo.com/bar.)

清除规则,然后定义您需要的内容:

<rules>
   <clear />
   <!-- Define your subapplication rules if needed -->
</rules>

该语句清除所有从父应用程序继承的规则。

您可以使用:

    <location path="." inheritInChildApplications="false">

父应用程序上的标签之间包裹的所有行都不会被继承到子应用程序

于 2013-10-09T07:24:41.613 回答
0

我解决了这个问题。

问题出在亚马逊 ELB 之上,我们还有另一个 akamai 负载均衡器。Akamai 正在缓存某些 url 并将它们发送到错误的服务器,因此我们得到 404,因为子应用程序不在 Akamai 发送请求的服务器上。

清除 Akamai 缓存,现在所有请求都在工作/访问正确的服务器和应用程序。

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

于 2013-10-10T03:14:40.297 回答