Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 简单的phar文件导致nginx中的重定向循环_Php_Nginx_Phar - Fatal编程技术网

Php 简单的phar文件导致nginx中的重定向循环

Php 简单的phar文件导致nginx中的重定向循环,php,nginx,phar,Php,Nginx,Phar,我正在为内容管理系统创建一个基于web的phar安装程序。问题是在nginx服务器上,即使是最简单的phar文件也会导致nginx重定向。apache中的一切都很好 我对nginx的经验很少,所以我无法理解这一点。我在寻找所有我能得到的帮助。提前谢谢 来源: 下面是.phar的构建脚本(我将.phar重命名为.php,这样就不需要funky.htaccess规则) 以及/etc/nginx/include/php文件 include /etc/nginx/fastcgi_params; loca

我正在为内容管理系统创建一个基于web的phar安装程序。问题是在nginx服务器上,即使是最简单的phar文件也会导致nginx重定向。apache中的一切都很好

我对nginx的经验很少,所以我无法理解这一点。我在寻找所有我能得到的帮助。提前谢谢

来源:

下面是.phar的构建脚本(我将.phar重命名为.php,这样就不需要funky.htaccess规则)

以及/etc/nginx/include/php文件

include /etc/nginx/fastcgi_params;
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    set $path_info $fastcgi_path_info;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    try_files $fastcgi_script_name =404;

    fastcgi_pass unix:/var/run/nginx/php-fastcgi.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}
和fastcgi_参数文件

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
编辑

这个问题与fastcgi模式有关,因为我使用相同的处理程序在apache中复制了它。
默认存根导致重定向循环,要求我使用固定存根。我将发布另一个问题

我自己也看到过这样的重定向循环,并报告了错误-


这个bug现在已经在PHP中修复了;PHP5.6.0、5.5.15和5.4.31。

fastcgi不会处理phar文件,除非您将其添加到
位置
模式
[^/]\(PHP | phar)(/|$)
以及
fastcgi分割路径信息(.+?\(?:PHP | phar))(/.*)
但我不确定在这种情况下是否会填充
$fastcgi\u path\u info
。为了解决这个问题,该文件被重命名为test.php。我得到了一个重定向循环。你的重命名导致了这个循环。我认为您应该尝试在本地创建文件,然后使用正确的MIME类型发出ajax下载请求。
server {
    listen 0.0.0.0:80;
    root /var/www/;
    index index.html index.php;

    include /etc/nginx/include/php;

    location /test2 {
        autoindex on;
    }
}
include /etc/nginx/fastcgi_params;
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    set $path_info $fastcgi_path_info;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    try_files $fastcgi_script_name =404;

    fastcgi_pass unix:/var/run/nginx/php-fastcgi.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;