【发布时间】:2016-10-12 19:03:34
【问题描述】:
我使用匹配表达式为https://([^/]*)/(.*),并将表达式替换为constantprefix/$2,并尝试通过将“/constantprefix”添加到所有网址来重写传入的网址
对于以下 URL,它按预期工作:
- https://hostname/incomingURI 正在转换为 /constantprefix/incomingURI
- https://hostname/ 正在转换为 /constantprefix/
- https://hostname/login/index.aspx 正在转换为 /constantprefix/login/index.aspx
我对已经以 /constantprefix 开头的 URL 有问题,我在输出 URL 中看到两个 /constantprefix/constantprefix 我不寻找,有什么办法可以避免这种情况吗?
如果传入 URL 为 https://hostname/constantprefix/login/index.aspx,则输出 URL 将变为 https://hostname/constantprefix/constantprefix/login/index.aspx 我可以知道如何从匹配表达式中避免 /constantprefix/constantprefix 吗?
【问题讨论】:
-
也许只是添加一个测试,比如
unless $url =~ |https://([^/]*)/$prefix|(未经测试)。然后它使用字符串两次,但它是直接扫描,效率应该不会太差 -
感谢您的快速回复,您是否建议匹配表达式为 https://([^/]*)/(.*)|https://([^/]*)/ $constantprefix ?
-
抱歉——我的意思是你做了替换除非它已经匹配了那个位置的
$prefix。因此,要检查它是否存在,如果不存在则运行替换。它比弄乱工作正则表达式要简单得多,而且很清楚它的作用。它确实会查看字符串两次,但检查应该很快。 -
我正在使用 IBM DataPower URL-write 功能,它没有提供任何条件的选项...我只能传递匹配表达式和替换表达式.. 我想看看是否有无论如何,我们可以跳过特定的 URL 模式,例如 /constantprefix/*
-
试试
https://[^/]*/(?!constantprefix(?:/|$))(.*)和constantprefix/$1
标签: regex pcre regex-greedy urlrewriter