在 Nginx 的 fastcgi_split_path_info 中,正则表达式的目标是按照 .php
文件名把路径分割成几个部分。在你的例子中,正则表达式 ^(.+\.php)(/.*)$
会匹配以 .php
结尾的字符串,并把匹配到的部分分割成两个组。
当请求 URL 为 http://192.168.0.1/4.php/xyz/5.php/abc/123?b=8
时,正则表达式会匹配到 /4.php/xyz/5.php/abc/123
,并把两个组分别分割为 /4.php
和 /xyz/5.php/abc/123?b=8
。然后,Nginx 会把第二个组(也就是 /xyz/5.php/abc/123?b=8
)作为 path_info。
如果你的目标是在这种情况下获取到 path_info
,你可能需要修改你的正则表达式来适应这种特殊情况。一个可能的解决方案是修改正则表达式来匹配 .php
之前和之后的所有字符,直到遇到 /
或者 URL 的末尾为止。你的新正则表达式可以是 ^((?:.*\.)?\w+\.php)(?:(.*\/.*))*$
。
这个正则表达式会把整个 URL 都作为一个组(例如 /4.php/xyz/5.php/abc/123?b=8
),然后后面跟着的是 path_info
(例如 /abc/123?b=8
)。
请注意,你需要确保这个修改不会对你的其他代码或者配置产生影响。此外,这个解决方案可能不适用于所有情况,特别是当你的 .php
文件名包含 .php
或者其他特殊字符时。在这种情况下,你可能需要进一步修改你的正则表达式来适应这些特殊情况。