在我的Windows 2012服务器上,我在IIS中安装了URL Rewrite模块。我已按照本指南将非www重定向到web.config中的www: http://www.surfingsuccess.com/asp/iis-url-rewrite.html#.VF6GBid0yAU
到目前为止,非常好!
唯一的问题是我们还托管了子域" api.example.com"。当我在web.config中应用代码时,此API停止工作。
我的问题是:下面的代码出了什么问题?当我尝试将非www重定向到www时,为什么子域停止工作,除了" api.example.com"?
<rewrite>
<rules>
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^api\.example\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.example.com/{R:1}" />
</rule>
</rules>
</rewrite>
答案 0 :(得分:0)
我有类似的检查,我有相同的规则,但在模式中有不同的指定。
我的建议是启用失败的请求跟踪来检查URL重写。 http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules
编辑:更新了规则。
<rewrite>
<rules>
<rule name="non-root" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(www.example.com)$" negate="true" />
<add input="{HTTP_HOST}" pattern="^(api.example.com)$" negate="true" />
<add input="{HTTP_HOST}" pattern="^(example.com)$" />
</conditions>
<action type="Redirect" url="http://www.example.com/{R:1}" />
</rule>
</rules>
</rewrite>
答案 1 :(得分:0)
实际上,我的重写代码没有任何问题。 API停止工作的原因是因为它对网站的顶级域名(example.com)有依据,这导致与重写代码冲突。将referance更改为doman(www.example.com)的www -version后,一切正常。