在nginx中使用fastcgi_split_path_info作为userdir

我试图在我的服务器上执行一个PHP文件在url /〜/ / / /~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;条款的return 404; ,我可以看到错误:

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

你可以看到我的configuration有什么问题,或者指向我有关如何做到这一点的文档? 不幸的是,先进的正则expression式知识是configurationnginx的要求。

事实上,这是你在那里犯的一个非常基本的正则expression式错误。

由于fastcgi_split_path_info指令中的第二个捕获组是(/.*)所以整个正则expression式^/~nik/(.+?\.php)(/.*)$ /~nik/t.php将不匹配^/~nik/(.+?\.php)(/.*)$ /~nik/t.php因为它没有跟着斜线。 问号在这里也没用,虽然这不是你看到的行为的原因。

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