【问题标题】:Match specific urls but not including a php file匹配特定的 url,但不包括 php 文件
【发布时间】:2018-03-29 20:53:34
【问题描述】:

我有以下示例网址

/alfa/wp-includes/js/jquery/jquery.js /beta/wp-content/plugins/app/js/media.js?parameter=value /beta/wp-admin/network /beta/wp-content/themes/journal/data.php

我正在使用以下正则表达式来匹配所有路径,不包括参数

^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*

这很好用,但是如何更改正则表达式以排除任何包含 .php 的路径?所以它需要返回前 3 条路径,而不是最后一条。

【问题讨论】:

  • @Wiktor 你有这个好的副本吗?
  • @mickmackusa 也许,PHP - parse current URL,但我的投票范围太广了。
  • 是的。有太多不同的、正确的方法来解决这个问题。 @JoeS 请表现出更多的努力,让我们知道你的进展。
  • @Wiktor 我不知道你为什么把它标记为 php,因为我在 Nginx 重写中使用它,所以你的链接是无用的。
  • @JoeS 我已将评论移至答案。如果这对您有所解释,请接受。

标签: regex nginx


【解决方案1】:

您可以使用 PCRE 动词 skipfail 跳过匹配的表达式。你可以在这里阅读更多关于它们的信息,http://www.rexegg.com/backtracking-control-verbs.html#skipfail。对于您当前的示例,您可以使用:

.*\.php$(*SKIP)(*FAIL)|^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*

这将跳过以.php 结尾的文件。

演示:https://regex101.com/r/YH3n0x/1/

.*\.php$ 查找任何内容,直到字符串/行末尾的 .php

【讨论】:

    【解决方案2】:

    我寻找的解决方案如下,谢谢@chris85

    .*\.php(*SKIP)(*FAIL)|^/(alfa|beta)((/wp-(content|admin|includes))([^?\s]*)).*
    

    【讨论】:

      猜你喜欢
      • 2013-04-18
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2021-08-21
      • 2012-06-27
      相关资源
      最近更新 更多