我正在尝试在我的服务器上的 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 的要求。
事实上,这是你在那里犯的一个非常基本的正则表达式错误。
由于
fastcgi_split_path_info
指令中的第二个捕获组是(/.*)
,因此整个正则表达式^/~nik/(.+?\.php)(/.*)$
将不匹配/~nik/t.php
,因为它后面没有斜杠。问号在这里也没有用,而这不是您看到的行为的原因。正确的正则表达式应该是
^/~nik/(.+\.php)(.*)$