regex - 使用 PCRE 表达式进行 URL 重写 - 将前缀附加到除一种模式之外的所有传入 URI

标签 regex pcre regex-greedy urlrewriter

我使用匹配表达式作为 https://([^/]*)/(.*) 并将表达式替换为 constantprefix/$2 并尝试重写通过向所有 URL 添加“/constantprefix”来传入 URL

对于以下网址,它按预期工作:

  1. https://hostname/incomingURI正在转换为 /constantprefix/incomingURI
  2. https://hostname/正在转换为/constantprefix/
  3. 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 吗?

最佳答案

你可以这样做:

https://[^/]*/(?!constantprefix(?:/|$))(.*)

使用替换字符串:

constantprefix/$1

(?!...) 是一个否定的前瞻,意味着后面没有。这只是一个测试,不消耗字符(模式中的这种元素也称为“零宽度断言”,作为后行或 anchor ^$).

你的模式中的第一个捕获组没有用,我删除了它。

关于regex - 使用 PCRE 表达式进行 URL 重写 - 将前缀附加到除一种模式之外的所有传入 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40006442/

相关文章:

php - 如果大于零则匹配数字

regex - Perl6 中的语法有点过于贪婪

python - 正则表达式:匹配括号贪婪和非贪婪

javascript - 如何获取类属性值的一部分?

Javascript正则表达式匹配相对单位

Python 正则表达式模式 * 未按预期工作

php - 如何更换ereg?

python - 为什么这个 Regexp 使用 pcre 而不是 Python 的步骤减少了 99.89%?

Java正则表达式查找子字符串

php - 用于 HTML 标记转换的正则表达式