将非WWW重定向到WWW(一个特定子域除外)

时间:2014-11-12 10:27:32

标签: asp.net iis url-rewriting url-rewrite-module canonical-name

在我的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>

2 个答案:

答案 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后,一切正常。