IIS URL 重写模块规范 Link 仅当没有子域时
IIS URL Rewrite Module Canonical Link Only If No Subdomain
我在 Windows 2012 服务器上使用 IIS URL 重写模块。如果缺少子域(或 'example.com' 上的完全匹配),我只想添加规范的 www 规则。
问题是 IIS 创建的现成规范重写规则将所有子域的所有流量 (*) 重写到 www。
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.example.com/{R:1}" />
</rule>
问题是我在一个站点下有多个子域/应用程序(因此有一个 web.config)。
我要
example.com
去
www.example.com
但要单独保留这些和任何其他子域:
secure.example.com
profile.example.com
我需要更具体的匹配正则表达式或模式吗?
更具体地说,安全子域使用https和更好的加密证书。
这个正则表达式更好:
^(w{3}\.)?\w+\.com/
这个正则表达式可以让您选择 url 有无 www。和末尾的 /,但仍然不会计算子域。
您正在寻找一切,不是 www.example.com
。这包括所有其他子域。
让我们看看你的情况:
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
如果www.example.com
进来 --> match = true --> 取反 --> false --> 什么都没有改变(如你所愿)
如果 example.com
进来 --> match = false --> 否定 --> true --> URL 被重定向(如你所愿)
如果 foo.example.com
进来 --> match = false --> 否定 --> true --> URL 被重定向(因为你不想要)
要解决此问题,请尝试以下配置:
<rule name="Redirect to www" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.+)://" />
<add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" url="{C:1}://www.example.com/{R:1}" />
</rule>
C:1
部分用于协议(http
和 https
)。
找到 here.
我在 Windows 2012 服务器上使用 IIS URL 重写模块。如果缺少子域(或 'example.com' 上的完全匹配),我只想添加规范的 www 规则。
问题是 IIS 创建的现成规范重写规则将所有子域的所有流量 (*) 重写到 www。
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://www.example.com/{R:1}" />
</rule>
问题是我在一个站点下有多个子域/应用程序(因此有一个 web.config)。
我要
example.com
去
www.example.com
但要单独保留这些和任何其他子域:
secure.example.com
profile.example.com
我需要更具体的匹配正则表达式或模式吗?
更具体地说,安全子域使用https和更好的加密证书。
这个正则表达式更好:
^(w{3}\.)?\w+\.com/
这个正则表达式可以让您选择 url 有无 www。和末尾的 /,但仍然不会计算子域。
您正在寻找一切,不是 www.example.com
。这包括所有其他子域。
让我们看看你的情况:
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
如果
www.example.com
进来 --> match = true --> 取反 --> false --> 什么都没有改变(如你所愿)如果
example.com
进来 --> match = false --> 否定 --> true --> URL 被重定向(如你所愿)如果
foo.example.com
进来 --> match = false --> 否定 --> true --> URL 被重定向(因为你不想要)
要解决此问题,请尝试以下配置:
<rule name="Redirect to www" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.+)://" />
<add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" url="{C:1}://www.example.com/{R:1}" />
</rule>
C:1
部分用于协议(http
和 https
)。
找到 here.