这个 '(?U)' 在nginx正则表达式中是什么意思?

3

我在阅读nginx的文档,但是不知道这个正则表达式中的'(?U)'是做什么用的。

http://wiki.nginx.org/HttpFastcgiModule#fastcgi_split_path_info

这是一个例子。脚本show.php以字符串article/0001作为参数接收。以下配置将正确处理路径拆分:
location ~ ^.+\.php {
  (...)
  fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_path_info;
  fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
  (...)
}

请求 /show.php/article/0001 会将 SCRIPT_FILENAME 设置为 /path/to/php/show.php,PATH_INFO 设置为 /article/0001。

这个正则表达式不够吗?

fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;

谢谢

1个回答

7

?U在正则表达式中表示非贪婪匹配。默认情况下,正则表达式使用'贪婪'模式。

在这种情况下,需要使用非贪婪匹配。使用贪婪匹配的话,会导致以下请求:

/show.php/article/0001/another.php/something

将脚本部分设置为:
/show.php/article/0001/another.php

这可能会导致意想不到的安全问题。

[更新]

nginx使用pcre正则表达式: http://www.pcre.org/pcre.txt

    (?U)            default ungreedy (lazy)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接