在 nginx 中对 userdir 使用 fastcgi_split_path_info

在 nginx 中对 userdir 使用 fastcgi_split_path_info

我正在尝试在 URL 处执行服务器上的 PHP 文件/~nik/t.php(实际文件位于/home/nik/public_html/t.php)。我的 PHP 设置如下:

location ~ ^/~(.+?)(/.*)\.php$ {
    alias /home/$1/public_html;

    # What should this regex be?
    fastcgi_split_path_info ^/~nik/(.+?\.php)(/.*)$; 
    if (!-f $document_root$fastcgi_script_name) {                 
        return 404;
    }

    include fastcgi.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;                           
 }

我不断收到 404 错误,当我注释掉 周围的子句时return 404;,我能够看到错误:

Unable to open primary script: /home/nik/public_html/~nik/t.php (No such file or directory)

您能看出我的配置有什么问题吗?或者能给我一些关于如何配置的文档吗?遗憾的是,配置 nginx 需要对正则表达式有深入的了解。

答案1

事实上,这是你犯的一个非常基本的正则表达式错误。

由于指令中的第二个捕获组fastcgi_split_path_info(/.*),因此整个正则表达式^/~nik/(.+?\.php)(/.*)$将不匹配/~nik/t.php,因为它后面没有斜杠。问号在这里也是无用的,但这不是您看到的行为的原因。

正确的正则表达式应该是^/~nik/(.+\.php)(.*)$

相关内容