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)(/?.+)$;

谢谢

4

1 回答 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)
于 2013-03-27T15:45:34.683 回答