匹配特定网址,但不包括php文件

时间:2018-03-29 20:53:35

标签: regex nginx

我有以下示例网址

/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个路径而不是最后路径。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以使用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为止。