【问题标题】:301 Redirect Regex Pattern301 重定向正则表达式模式
【发布时间】:2020-10-14 12:16:27
【问题描述】:

我正在尝试制定一个 IIS 重定向规则来从这个 url 模式重定向,但它打败了我:

https://www.mycompanyPLC.com/en/lorem/ipsum/whatever

https://www.mycompanyLTD.com/lorem/ipsum/whatever

基本上我需要用LTD替换PLC,如果url中有“/en/”组,则必须将其删除。

【问题讨论】:

  • \en\ 是否总是在 .com 之后?
  • @Mandy8055 对于这条规则,是的。在另一种情况下“/en/”不存在,但我正在为这种情况创建另一个规则。
  • 我喜欢你的回答,全面且解释清楚。
  • @Mandy8055 如果你能看看这个:stackoverflow.com/questions/62579295/…我将不胜感激。
  • 您是否尝试过使用我在回答中建议的正则表达式?如果你愿意,它肯定会奏效。

标签: regex redirect iis http-status-code-301


【解决方案1】:

在讲授 Regex 几个小时后,我创建了这个规则并且似乎正在工作(我已经测试了几个场景):

^(http|https)://?(www.)mycompanyPLC.com/en?(.*)

来自 IIS 的重定向 URL 是:

https://www.mycompanyLTD.com/{R:3}

后期编辑:

IIS中的规则是这样的:

<rule name="Replace PLC with LTD and remove /en/" enabled="true" stopProcessing="true">
                    <match url="(.*?)PLC\.com(?:\/\ben\b)?(.*)" />
                    <conditions logicalGrouping="MatchAny" trackAllCaptures="false" />
                    <action type="Redirect" url="{R:1}ltd.com{R:2}" />
                </rule>

测试网址是这种格式:

http://webdev.myCompanyplc.com/en/our-experience/retail
{R:1} = http://webdev.myCompany
{R:2} = /our-experience/retail

正则表达式没问题,但重定向仍然无效

【讨论】:

  • 你用过大小写无关模式吗?即-i 标志?因为PLC 区分大小写,并且在您的示例中您使用的是plc。类似ignoreCase="true"
【解决方案2】:

请参考以下网址规则。

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="en(.*)" />
                    <action type="Redirect" url="https://www.mycompanyLTD.com{R:1}" />
                </rule>
            </rules>
        </rewrite>
</system.webServer>

无需强制匹配/en URL 片段。只要我们发现我们有一个/en URL 段,我们就会重定向请求。 http/https URL 段也是如此。
如果有什么我可以帮忙的,请随时告诉我。

【讨论】:

【解决方案3】:

您可以使用/en/ 前面带有.com 的单个正则表达式来满足您的这两个要求。比如:

(.*?)PLC\.com(?:\/\ben\b)?(.*)

上述正则表达式的解释:

  • (.*?) - 代表第一个捕获组捕获PLC之前的所有内容lazily
  • PLC\.com - 从字面上匹配 PLC.com
  • (?:\/\ben\b)? - 表示匹配 \en 字面上零次或一次的非捕获组。 \b 代表word boundary.
  • (.*) - 表示第二个捕获组匹配\en 之后的所有内容贪婪
  • $1LTD.com$2 - 对于替换(或本例中的重定向)部分,您可以使用此字符串,其中$1 代表第一个捕获的组,$2 代表第二个捕获的组。在你的情况下;你可以使用{R:1}LTD.com{R:2}

你可以在here.找到上述正则表达式的demo

【讨论】:

    猜你喜欢
    • 2015-08-29
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2012-06-21
    • 2017-06-21
    • 2014-12-05
    相关资源
    最近更新 更多