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はpcreregexを使用します:http://www.pcre.org/pcre.txt

    (?U)            default ungreedy (lazy)
于 2013-03-27T15:45:34.683 に答える