【问题标题】:IIS Rewrite rules for languages and new domains语言和新域的 IIS 重写规则
【发布时间】:2020-10-16 03:26:52
【问题描述】:

我需要为以下场景创建一些规则(我认为 2 条就足够了):

A.第一种情况

https://www.mydomainOLD.com/en/lorem/ipsum/doloret/etc 到 https://www.mydomainNEW.com/lorem/ipsum/doloret/etc

基本上,我需要将域从 mydomainOLD 更改为 mydomainNEW 并在出现时从 URL 中删除“/en/”。

我创建的规则如下:

<rule name="Replace OLD with NEW and remove /en/" enabled="true" stopProcessing="true">
    <match url="^(http|https)://?(www.)mydomainOLD.com/en?(.*)" />
    <conditions logicalGrouping="MatchAny" trackAllCaptures="false" />
    <action type="Redirect" url="https://www.mydomainNEW.com/{R:3}" />
</rule>

B.第二种情况:

https://es.mydomainOLD.com/en/lorem/ipsum/doloret/etc 到 https://es.mydomainNEW.com/en/lorem/ipsum/doloret/etc

在这种情况下,除了“es”,我还可以使用其他国家/地区(fr、de、hk 等)

我创建的规则如下(针对每个国家/地区):

 <rule name="ES redirect from OLD to NEW" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
                        <add input="{HTTP_HOST}" pattern="^(.*)es.mydomainOLD(.*)$" />
                    </conditions>
                    <action type="Redirect" url="{C:1}be.mydomainNEW.com{C:2}" appendQueryString="false" />
                </rule>

这些规则都没有按我的意愿工作,即使当我测试正则表达式时它们按预期工作。我认为我缺少的条件输入还有更多内容。一点帮助将非常受欢迎。谢谢。

【问题讨论】:

标签: redirect iis url-rewriting


【解决方案1】:

请在 /en/ 中尝试这条规则

 <rule name="rewrite rule" stopProcessing="true">
                <match url="(.*)" />
                <conditions trackAllCaptures="true">
                    <add input="{URL}" pattern="^/en/(.*)" />
                    <add input="{HTTP_HOST}" pattern="(www.)?mydomainOLD.com" />
                </conditions>
                <action type="Redirect" url="https://www.mydomainNEW.com/{C:1}" redirectType="Temporary" />
            </rule>

对于类似 old/en/ to new/en/ 或 old/fr to old/fr,请应用这个。

   <rule name="rewrite rule" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions trackAllCaptures="true">
                        <add input="{URL}" pattern="^/([a-z]{2}/.*)" />
                        <add input="{HTTP_HOST}" pattern="es.mydomainOLD.com" />
                    </conditions>
                    <action type="Redirect" url="https://es.mydomainNEW.com/{C:1}" redirectType="Temporary" />
                </rule>

更新: 如果您需要将 (es/fr/de/hk).mydomainold.com 重定向到 (es/fr/de/hk).mydomainnew.com。请试试这个

      <rule name="rewrite rule" enabled="true" stopProcessing="true">
            <match url="(.*)" />
            <conditions trackAllCaptures="true">
                <add input="{HTTP_HOST}" pattern="([a-zA-Z]{2})\.mydomainOLD.com" />
            </conditions>
            <action type="Redirect" url="https://{C:1}.mydomainNEW.com/{R:0}" redirectType="Temporary" />
        </rule>

【讨论】:

  • 谢谢,第一条规则有帮助。第二个还没试过。
  • @iusmar 我只是更新了规则。请检查它是否达到您的要求
  • 我应该为查询字符串添加什么规则,因为像这样的链接:mydomainOLD.com/en/news?page=32&category=&view=current 被重定向到mydomainNEW/news
  • 因为您的规则 appendQueryString="false"。如果要重定向到 mydomainNEW.com/en/news?page=32&category=&view=current,应该是 appendQueryString="true"
  • 感谢 Jokies Ding。这帮助很大。
【解决方案2】:

对于场景 #1:

<rule name="General redirect - all urls - from OLD to NEW" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTP_HOST}" pattern="^mydomainOLD\.com(.*)$" />
                        <add input="{URL}" pattern="^/en/(.*)" />
                    </conditions>
                    <action type="Redirect" url="http://mydomainNEW.com/{C:1}" appendQueryString="false" redirectType="Permanent" />
                </rule>

对于场景 #2: 每个国家有一条规则(本例中为 Fr):

<rule name="France redirect - all urls - from OLD to NEW" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTP_HOST}" pattern="^fr.mydomainOLD\.com(.*)$" />
                        <add input="{URL}" pattern="^/(.*)" />
                    </conditions>
                    <action type="Redirect" url="http://fr.mydomainOLD.com/{C:1}" appendQueryString="false" redirectType="Permanent" />
                </rule>

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 1970-01-01
    • 2013-08-14
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2014-10-27
    相关资源
    最近更新 更多