3

我在 Direct Admin 中有一个带有自定义位置的 nginx conf:

代码:

location /reset-password {
     alias /home/**/domains/**.**/public_html/api/frontend-scripts/resetPassword;
     include /usr/local/directadmin/data/users/**/nginx_php.conf;
}

这是行不通的;nginx 显示“找不到文件。” 对于浏览器中的所有 PHP 相关文件。纯 HTML 工作正常。

我尝试了其他几种解决方案,即:

代码:

location /reset-password {
    alias /home/**/domains/**.**/public_html/api/frontend-scripts/resetPassword;
    # use fastcgi for all php files
    location ~ \.php$
    {
       try_files $uri index.php;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       include /etc/nginx/fastcgi_params;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include /etc/nginx/nginx_limits.conf;
       if (-f $request_filename)
       {
           fastcgi_pass unix:/usr/local/php56/sockets/**.sock;
       }
    }
 }

他们都给出了“找不到文件”。在浏览器中。

所以它可能与phpfpm有关,但我没有选择。我究竟做错了什么?

4

1 回答 1

2

与 PHP 一起使用alias总是有问题的,因为该$document_root$fastcgi_script_name语句不再有效。

你可以使用:

fastcgi_param SCRIPT_FILENAME $request_filename;

但是一个开放的错误nginx使得try_fileswith的使用alias有点不可预测。

我首选的解决方案是不可见地重写 URI,以便可以使用root指令:

location ^~ /reset-password {
    rewrite ^/reset-password(.*)$ /resetPassword$1 last;
}
location ^~ /resetPassword {
    root /home/**/domains/**.**/public_html/api/frontend-scripts;
    ...
}

另请注意,如果存在同一级别的其他正则表达式位置块(例如另一个块) ,该^~修饰符会导致这些前缀位置块优先于其他正则表达式位置块。location ~ \.php$

于 2016-12-07T09:30:48.183 回答