IIS Url 将正则表达式反向引用重写为未知数量的匹配项
IIS Url Rewrite Regex Backreference to unknown number of matches
我的正则表达式技能有限,但我设法想出了一个似乎与我想要的匹配的表达式,但我遇到的问题是使用我的表达式的匹配部分。
规则如下:
<rule name="FixDestinationCategories" stopProcessing="false">
<match url="^([^\/]+\/){2,4}category/([^\/]+\/){2}/?$" />
<action type="Redirect" appendQueryString="true" redirectType="Permanent" url="{R:1}" />
</rule>
一个示例 url 可能如下所示:
country/destinations/itineraries/itinerary/category/region/country/
another/directory/category/region/country/
由于网站上的问题,我正在尝试 301 重定向网站上的链接以删除 url 的最后 3 个片段。之前的段数可以在 2 到 4 之间变化。我想要做的是获取 /category/region/country/
之前的整个路径,我还需要确保生成的路径以尾部斜杠结尾,以便上面的重定向例子最终会是:
country/destinations/itineraries/itinerary/
another/directory/
但是,目前我的重定向 urls 最终是:
itinerary/
directory/
我已经做了很多搜索来寻找解决方案,但在这种情况下,我什至不确定我是否知道用于我的搜索的术语,因为我读到的关于反向引用的大部分内容似乎都是处理单一的比赛。
您需要使第一个和第二个捕获组成为非捕获组,并将第一个组及其量词与捕获组包装起来:
^((?:[^/]+/){2,4})category/(?:[^/]+/){2}/?$
^^^^ ^ ^^
((?:[^/]+/){2,4})
是 ID 为 1 的捕获组,它匹配 2、3 或 4 个连续出现的 1+ 个字符,而不是 /
,然后是 /
。 (
之后的?:
形成一个non-capturing group,只用于对一系列模式进行分组,不在内存中存储子匹配,找到匹配后不能引用其内容。
那些绿色突出显示的部分是捕获到第 1 组的子字符串,{R:1}
占位符是指:
我的正则表达式技能有限,但我设法想出了一个似乎与我想要的匹配的表达式,但我遇到的问题是使用我的表达式的匹配部分。
规则如下:
<rule name="FixDestinationCategories" stopProcessing="false">
<match url="^([^\/]+\/){2,4}category/([^\/]+\/){2}/?$" />
<action type="Redirect" appendQueryString="true" redirectType="Permanent" url="{R:1}" />
</rule>
一个示例 url 可能如下所示:
country/destinations/itineraries/itinerary/category/region/country/
another/directory/category/region/country/
由于网站上的问题,我正在尝试 301 重定向网站上的链接以删除 url 的最后 3 个片段。之前的段数可以在 2 到 4 之间变化。我想要做的是获取 /category/region/country/
之前的整个路径,我还需要确保生成的路径以尾部斜杠结尾,以便上面的重定向例子最终会是:
country/destinations/itineraries/itinerary/
another/directory/
但是,目前我的重定向 urls 最终是:
itinerary/
directory/
我已经做了很多搜索来寻找解决方案,但在这种情况下,我什至不确定我是否知道用于我的搜索的术语,因为我读到的关于反向引用的大部分内容似乎都是处理单一的比赛。
您需要使第一个和第二个捕获组成为非捕获组,并将第一个组及其量词与捕获组包装起来:
^((?:[^/]+/){2,4})category/(?:[^/]+/){2}/?$
^^^^ ^ ^^
((?:[^/]+/){2,4})
是 ID 为 1 的捕获组,它匹配 2、3 或 4 个连续出现的 1+ 个字符,而不是 /
,然后是 /
。 (
之后的?:
形成一个non-capturing group,只用于对一系列模式进行分组,不在内存中存储子匹配,找到匹配后不能引用其内容。
那些绿色突出显示的部分是捕获到第 1 组的子字符串,{R:1}
占位符是指: