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

Asp.net 将非WWW重定向到WWW(一个特定子域除外),asp.net,iis,url-rewriting,url-rewrite-module,canonical-name,Asp.net,Iis,Url Rewriting,Url Rewrite Module,Canonical Name,在我的Windows 2012服务器上,我已在IIS中安装了URL重写模块。我按照本指南将非www重定向到web.config中的www: 到目前为止,一切都很好 唯一的问题是,我们还托管子域“api.example.com”。当我在web.config中应用代码时,此API停止工作 我的问题是:下面的代码有什么问题?当我尝试将非www重定向到www(除了“api.example.com”)时,为什么子域停止工作 我有类似的检查,我有相同的规则,但在模式中的指定不同 我的建议是启用失败的请求跟

在我的Windows 2012服务器上,我已在IIS中安装了URL重写模块。我按照本指南将非www重定向到web.config中的www:

到目前为止,一切都很好

唯一的问题是,我们还托管子域“api.example.com”。当我在web.config中应用代码时,此API停止工作

我的问题是:下面的代码有什么问题?当我尝试将非www重定向到www(除了“api.example.com”)时,为什么子域停止工作


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

我的建议是启用失败的请求跟踪来检查URL重写。

编辑:更新规则

 <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>


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

不幸的是,这也没有帮助,当我在web.config(example.com)中添加代码时,api.example.com仍然停止工作。我觉得这很奇怪,因为api.example.com是IIS中的一个站点,example.com是IIS中的另一个站点。当我在一个站点(example.com)上重写用户url时,为什么会影响另一个站点(api.example.com)。它们也在单独的应用程序池中运行。如果输入不是以www.example.com或api开头,是否可以制定一个只重定向到www.example.com的规则?是否在WWWROOT\web.config级别添加重写规则?你还有其他可能干扰的东西吗?我建议尝试跟踪失败的请求以查看日志。它将准确地指出问题所在。@Øyvind更新了答案。这是在WWWROO上我的本地IIS web.config上运行的。事实上,我的重写代码没有问题。子域停止工作的原因是它引用了站点的顶级域(example.com),这导致了与重写代码的冲突。将引用更改为doman的www-version(www.example.com)后,一切正常。@yvind,有一个问题,您提到您有一个“引用”到该站点的顶级域,该引用在哪里。我也有同样的问题。我还没有正式试用过你的代码,但你是说你的重写代码行得通吗?我只是想知道,如果我有同样的问题,这个顶级域名的“引用”在哪里。
 <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>