尽管模式匹配,但 IIS 重写规则仍被跳过

尽管模式匹配,但 IIS 重写规则仍被跳过

抱歉标题模糊,问题太复杂,无法用一句话来概括......

我正在尝试设置以下重定向规则:

  1. blog.mydomain.net/en/something:重定向至www.mydomain.com/something
  2. blog.mydomain.net/fr/something:重定向至www.mydomain.fr/something
  3. 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_enRedirectBlog_fr跳过;我测试了正则表达式并且它们工作正常。

有人能发现这个问题吗?


编辑:如果我禁用第 3 条规则(RedirectBlog_other),则规则 1 和 2 可以正常工作...这是怎么可能的,因为规则 1 和 2 在规则 3 之前执行?

答案1

好,我知道了!

首先,事情并没有像我想象的那样发展;规则 1 和 2不是当我禁用规则 3 时它仍然有效:我仍然被重定向到我的实际域,但这是由 Wordpress 完成的,而不是由我的规则完成的。

其次,我匹配 URL 的模式是错误的:前导的“/”是不是包含在输入中,所以我的规则根本不匹配。

相关内容