对于指向同一物理路径的多个站点,IIS 301 将非 www 重定向到 www。正则表达式
IIS 301 redirect non-www to www for multple sites pointed at same physical path. Regex
我在 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://
工作
谁能帮忙,非常感谢所有的建议?
不能直接用正则匹配,因为正则只作用于路径,不包括主机(域名):Accessing URL Parts from a Rewrite Rule.
如果您需要在主机名上包含条件,则需要在规则中添加 <condition>
:
The <host> is available in the server variable HTTP_HOST and can be accessed by using a condition within a rule.
条件的定义如此处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>
哟只需要做两个简单的改变:
- 修改条件模式以仅捕获 non-www 主机名。此正则表达式:
(^(?!www\.).*$)
将捕获所有不以 "www."
开头的主机名
- 重写 url 包括缺失的
www.
在这种情况下,使用: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}"
我在 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://
工作谁能帮忙,非常感谢所有的建议?
不能直接用正则匹配,因为正则只作用于路径,不包括主机(域名):Accessing URL Parts from a Rewrite Rule.
如果您需要在主机名上包含条件,则需要在规则中添加 <condition>
:
The <host> is available in the server variable HTTP_HOST and can be accessed by using a condition within a rule.
条件的定义如此处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>
哟只需要做两个简单的改变:
- 修改条件模式以仅捕获 non-www 主机名。此正则表达式:
(^(?!www\.).*$)
将捕获所有不以"www."
开头的主机名
- 重写 url 包括缺失的
www.
在这种情况下,使用: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}"