【问题标题】:Redirect Non-WWW to WWW (except one spesific subdomain)将非万维网重定向到万维网(一个特定子域除外)
【发布时间】:2015-01-09 04:02:39
【问题描述】:

在我的 Windows 2012 服务器上,我在 IIS 中安装了 URL 重写模块。我已按照本指南将非 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>

【问题讨论】:

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


    【解决方案1】:

    我有类似的检查,我有相同的规则,但指定的模式不同。

    我的建议是启用失败的请求跟踪来检查 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>
    

    【讨论】:

    • 不幸的是,这也没有帮助,当我在 web.config (example.com) 中添加 代码时,api.example.com 仍然停止工作。我认为这很奇怪,因为 api.example.com 是 IIS 中的一个站点,而 example.com 是 IIS 中的另一个站点。当我在一个站点(example.com)上用户 url 重写时,为什么会影响另一个站点(api.example.com)。它们还在单独的应用程序池中运行。
    • 如果输入不以 www 开头,是否可以制定仅重定向到 www.example.com 的规则。还是 api.?
    • 您是否在 WWWROOT\web.config 级别添加重写规则?你还有什么可以干扰的吗?我建议尝试 Failed Request Tracing 来查看日志。它将准确指出问题所在。
    • @Øyvind 更新了答案。这适用于 wwwroot 的本地 IIS web.config
    • 其实我的重写代码没有问题。子域停止工作的原因是因为它引用了站点的顶级域(example.com),这导致与重写代码发生冲突。更改对域的 www 版本(www.example.com)的引用后,一切正常。
    【解决方案2】:

    实际上,我的重写代码没有任何问题。 API 停止工作的原因是因为它引用了站点的顶级域(example.com),这导致与重写代码发生冲突。更改对域的 www 版本(www.example.com)的引用后,一切正常。

    【讨论】:

    • @yvind,有一个问题,您提到您对网站的顶级域有“引用”,该引用在哪里。我有同样的问题。我还没有正式尝试过你的代码,但你是说你的重写代码有效吗?我只是想知道这个顶级域的“参考”在哪里,以防我遇到同样的问题。
    猜你喜欢
    • 2015-12-16
    • 2014-08-22
    • 2015-11-15
    • 2015-10-15
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多