301 重定向正则表达式模式

Posted

技术标签:

【中文标题】301 重定向正则表达式模式【英文标题】:301 Redirect Regex Pattern 【发布时间】: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 如果你能看看这个:***.com/questions/62579295/…我将不胜感激。 您是否尝试过使用我在回答中建议的正则表达式?如果你愿意,它肯定会奏效。 【参考方案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:1ltd.comR: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.comR:1" />
                </rule>
            </rules>
        </rewrite>
</system.webServer>

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

【讨论】:

你能看看这个话题吗:***.com/questions/62579295/… ?【参考方案3】:

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

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

上述正则表达式的解释:

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

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

【讨论】:

以上是关于301 重定向正则表达式模式的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式将 301 重定向到具有不同编号的新 url

htaccess正则表达式301重定向

iis里URL重写重定向,http做301重定向https

Nginx Rewrite正则表达式案例

高分求301重定向的htaccess规则写法

使用 .htaccess 正则表达式重定向 wordpress 结构的正确方法