使用IIS URL将非www重定向到www通常无需硬编码域或TLCD重写

时间:2015-04-30 08:48:06

标签: asp.net iis seo url-rewrite-module

我正在构建一个ASP.NET CMS驱动的Web应用程序,它将为不同域名下的多个网站提供服务。其中一些将使用www子域,其他将使用自定义子域。将有各种顶级国家域名。

我正在寻找一个通用的IIS网址重写规则,该规则会将任何不指定子网域的网址重定向到其www等效网页。

当我说通用时,这意味着该规则无法对域名或顶级国家/地区域进行硬编码。因此规则必须重定向 http://anything.anywhere/any-pathhttp://www.anything.anywhere/any-path,但请http://sub.anything.anywhere/any-path

我发现的最接近的是this仍然硬编码TLCD。如果不了解URL Rewrite的语法,我就不知道如何处理任何TLCD。

提前致谢。

更新

受到评论的启发,我已经开始使用正则表达式,但还没有找到一种方法,不需要我对所有可能的TLCD列表进行硬编码。我怀疑这是我能得到的最好的。任何人都可以改进或确认这个答案吗?

^([a-z]+[.](com|co.uk|de|fr|etc)+)*

1 个答案:

答案 0 :(得分:3)

我只是使用具有两个条件的重写规则完成相同的操作,一个用于获取Scheme,另一个用于确定是否缺少www。该方案是必要的,因为重定向必须是绝对的,但如果您不支持可以硬编码的HTTPS。请记住,我还没有时间测试HTTPS部分,但很确定它能正常工作。

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Root Redirect" stopProcessing="true">
                        <match url=".*" negate="false" />
                        <action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:0}" />
                        <conditions trackAllCaptures="true">
                            <add input="{CACHE_URL}" pattern="^(.*)://" />
                            <add input="{HTTP_HOST}" pattern="^(?!www\.).*" />
                        </conditions>
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>