【问题标题】:IIS 301 redirect non-www to www for multple sites pointed at same physical path. Regex对于指向同一物理路径的多个站点,IIS 301 将非 www 重定向到 www。正则表达式
【发布时间】:2016-04-18 07:03:26
【问题描述】:

我在 IIS 中设置了多个站点,它们指向硬盘驱动器上的相同物理结构,即所有站点只有一个 Web 配置文件。

我需要将所有网站的所有非 www 流量重定向到 www。

例如,IIS url 重写中的这种情况适用于单个域,但它不适用于我,因为必须指定域名:

Input: {HTTP_HOST}
Type: Matches the Pattern
Pattern: ^domain.com\$

Redirect URL: http://www.domain.com/{R:1}
Redirect Type: Permanent 301

所以理想情况下,我需要两种正则表达式模式,一种用于匹配所有域的模式(这些是 .co.uk、.com、.uk.com 等的混合),另一种用于重定向到重定向 URL。

它也需要适用于 https://

任何人都可以提供帮助,非常感谢所有建议?

【问题讨论】:

    标签: regex iis url-rewriting pattern-matching multiple-domains


    【解决方案1】:

    您不能直接将其与正则表达式匹配,因为正则表达式仅应用于不包括主机(域名)的路径:Accessing URL Parts from a Rewrite Rule。

    如果您需要在主机名中包含条件,则需要在规则中添加<condition>:

    在服务器变量 HTTP_HOST 中可用,并且可以通过使用规则中的条件来访问。

    条件的定义如此处as explained here 所述。

    最后,您可以以与在路径中引用正则表达式匹配的类似方式引用条件,但使用语法 {C:1} 或 {R:1}。

    如需了解如何操作的最终线索,请see this。基本上你必须根据你的具体情况调整这个规则:

    <rule name="Rewrite subdomain">
       <match url="^(.+)" > 
       <!-- rule back-reference is captured here -->
       <conditions>
         <add input="{HTTP_HOST}" type="Pattern"
              pattern="^([^.]+)\.mysite\.com$">
         <!-- condition back-reference is captured here -->
       </conditions>
       <action type="Rewrite" url="{C:1}/{R:1}" />
       <!-- rewrite action uses back-references to condition and 
            to rule when rewriting the url -->
    </rule>
    

    你只需要做两个简单的改变:

    • 修改条件模式以仅捕获非 www 主机名。此正则表达式:(^(?!www\.).*$) 将捕获所有不以 "www." 开头的主机名
    • 重写包含缺少的www.的url 在这种情况下,使用这个:url="www.{C:1}/{R:1}"

    注意:此规则会进行重写。您可以改为进行重定向,而不是允许在此规则之后的其他规则进行重定向

    注意 2:您需要以类似的方式创建两个不同的规则来处理 http 和 https。它们位于{HTTPS} 服务器变量上,可以是"on" 或"off"。在每个规则中,您应该包含操作 url="http://www.{C:1}/{R:1}" 或 url="https://www.{C:1}/{R:1}"

    【讨论】:

    • 非常感谢您的提示。那么 {C:1} 是否引用了条件的 {HTTP_HOST} 部分?抱歉,我对正则表达式没用,所以我对修改条件模式一点也不聪明
    • 我确实认为我的模式需要是 ^(.*)$ 但我不确定
    • 我找到了这篇文章,但它对我不起作用:weblogs.asp.net/owscott/…
    • 请查看更新后的答案。请记住,这条规则是重写的,所以它应该在任何其他规则之前,或者与重定向规则相结合
    • 再次感谢您。但它似乎不起作用。我只是得到一个空白页,没有添加 www。我注意到您将您的规则标记为“重写子域”,但我正在使用顶级域。
    猜你喜欢
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2020-12-09
    • 2014-11-26
    • 2015-03-05
    • 2017-05-03
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多