![尽管模式匹配,但 IIS 重写规则仍被跳过](https://linux22.com/image/584282/%E5%B0%BD%E7%AE%A1%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%EF%BC%8C%E4%BD%86%20IIS%20%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99%E4%BB%8D%E8%A2%AB%E8%B7%B3%E8%BF%87.png)
抱歉标题模糊,问题太复杂,无法用一句话来概括......
我正在尝试设置以下重定向规则:
blog.mydomain.net/en/something
:重定向至www.mydomain.com/something
blog.mydomain.net/fr/something
:重定向至www.mydomain.fr/something
blog.mydomain.net/*
:重定向至www.mydomain.com
规则 3 有效,但规则 1 和 2 似乎被跳过,因此始终应用规则 3。以下是我的 web.config 规则:
<!-- Canonicalize mydomain.com to www.mydomain.com -->
<rule name="CanonicalHostNameRule_en" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^mydomain\.com$" />
</conditions>
<action type="Redirect" url="http://www.mydomain.com/{R:1}" />
</rule>
<!-- Canonicalize mydomain.fr to www.mydomain.fr -->
<rule name="CanonicalHostNameRule_fr" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^mydomain\.fr$" />
</conditions>
<action type="Redirect" url="http://www.mydomain.fr/{R:1}" />
</rule>
<!-- Redirect blog.mydomain.net/en/something to www.mydomain.com/something -->
<rule name="RedirectBlog_en" enabled="true" stopProcessing="true">
<match url="^/en(/.*)?$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^blog\.mydomain\.net$" />
</conditions>
<action type="Redirect" url="http://www.mydomain.com/{R:1}" />
</rule>
<!-- Redirect blog.mydomain.net/fr/something to www.mydomain.fr/something -->
<rule name="RedirectBlog_fr" enabled="true" stopProcessing="true">
<match url="^/fr(/.*)?$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^blog\.mydomain\.net$" />
</conditions>
<action type="Redirect" url="http://www.mydomain.fr/{R:1}" />
</rule>
<!-- Redirect blog.mydomain.net/* to www.mydomain.com -->
<rule name="RedirectBlog_other" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^blog\.mydomain\.net$" />
</conditions>
<action type="Redirect" url="http://www.mydomain.com/" />
</rule>
<!-- Wordpress-specific rules -->
...
我不明白为什么规则RedirectBlog_en
被RedirectBlog_fr
跳过;我测试了正则表达式并且它们工作正常。
有人能发现这个问题吗?
编辑:如果我禁用第 3 条规则(RedirectBlog_other),则规则 1 和 2 可以正常工作...这是怎么可能的,因为规则 1 和 2 在规则 3 之前执行?
答案1
好,我知道了!
首先,事情并没有像我想象的那样发展;规则 1 和 2不是当我禁用规则 3 时它仍然有效:我仍然被重定向到我的实际域,但这是由 Wordpress 完成的,而不是由我的规则完成的。
其次,我匹配 URL 的模式是错误的:前导的“/”是不是包含在输入中,所以我的规则根本不匹配。