IIS 10 随机 500 错误 - 可能来自 URL 重写

IIS 10 随机 500 错误 - 可能来自 URL 重写

这是一台生产 IIS Web 服务器,已正常运行一个月。服务器上有 6 个站点,上周其中一个站点开始出现随机 500 错误。这是两个使用 URL 重写的站点之一。我们与一位经验丰富的顾问讨论了大约 2 个半小时,但他无法给出明确的答案。重写规则是:

<httpErrors existingResponse="PassThrough" />
<rewrite>
  <rules>
    <rule name="Redirect .cfm extension" stopProcessing="false">
      <match url="^(.*).cfm$" ignoreCase="true" />
    <conditions logicalGrouping="MatchAny">
      <add input="{URL}" pattern="(.*).cfm$" ignoreCase="false" />
    </conditions>
      <action type="Redirect" url="{R:1}" redirectType="Permanent" />
    </rule>
    <rule name="hide .cfm extension" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="true" />
    <conditions>
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      <add input="{REQUEST_FILENAME}.cfm" matchType="IsFile" />
    </conditions>
      <action type="Rewrite" url="{R:0}.cfm" />
    </rule>
</rules>

失败的追踪显示在此处输入图片描述

我们取消了那条规则,从此以后就再也没有遇到过麻烦。

现在,使用 URL Rewrite 的其他网站正在给出随机错误,但是由于它是 API,因此修复这个错误有点复杂。

<httpErrors existingResponse="PassThrough" />
    <rewrite>
        <rules>
            <rule name="ApiWithControllerAndId" stopProcessing="true">
                <match url="^([^/]+)/([^/]+)/([^/]+)/?$" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="index.cfm?controller={R:1}&amp;method={R:2}&amp;id={R:3}" />
            </rule>
            <rule name="ApiWithController" stopProcessing="true">
                <match url="^([^/]+)/([^/]+)/?$" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                </conditions>
                <action type="Rewrite" url="index.cfm?controller={R:1}&amp;method={R:2}" />
            </rule>
        </rules>
    </rewrite>

它们似乎随机出现和消失。我们没有发现任何可以保证 500 响应的东西。我们有一个相同的暂存服务器,它没有给出任何 500 错误。我刚刚在此网站上启用了失败请求跟踪,但到目前为止还没有捕获到 500 错误。

相关内容