0

抱歉标题含糊,问题太复杂,无法用一句话概括……

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

  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被跳过;我测试了正则表达式,它们工作正常。

谁能发现问题?


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

4

1 回答 1

1

好,我知道了!

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

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

于 2012-05-16T19:49:49.673 回答