我刚刚开始在IIS中查看重写器模块的URL。
以下代码是我的工作原理(它从网站的所有网址中删除www)
<rewrite>
<rules>
<rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{CACHE_URL}" pattern="*://www.*" />
</conditions>
<action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
但是,我们有一个发布到http://www.example.com/api/controller/method的第三方API不再有效。 (它正在服务405&#39;)
问题是(我相信)虽然WebAPI允许www.example.com/api/controller/method进行POST,但它将example.com/api/controller/method视为不同的URL并且不允许POST。
但是,以下配置部分不起作用。 (注意,删除通配符部分意味着它确实有效,所以我确信我可以认为这是导致第三方失败的原因)。虽然在配置重写部分中测试IIS中的PassAPICall已通过。是不是我误解了stopProcessing的意图,实际上它只是停止处理该规则,所以它会通过以下条件下降?
<rules>
<clear />
<rule name="PassAPICall" stopProcessing="true">
<match url="/api/Blah/QuotationComplete" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="None" />
</rule>
<rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{CACHE_URL}" pattern="*://www.*" />
</conditions>
<action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent" />
</rule>
</rules>
答案 0 :(得分:0)
是一个简单的语法问题,我需要对规则更加明确,而不是IIS测试工具让我相信。
改变
<match url="/api/Blah/QuotationComplete" />
到
<match url="^api/Blah/QuotationComplete$" />
做到了。