Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
nginx:php文件扩展名不适用于try\u文件_Php_Nginx - Fatal编程技术网

nginx:php文件扩展名不适用于try\u文件

nginx:php文件扩展名不适用于try\u文件,php,nginx,Php,Nginx,我正在尝试制作一个下载脚本,它捕获对/files/的所有请求并强制下载。脚本完全可以工作,并下载我抛出的任何文件。问题是,当我试图通过try_文件传递扩展名为.php的文件时,以下nginx config会出错: server { listen 80 default_server; listen [::]:80 default_server; listen 443 ssl; listen [::]:443 ssl; server_name _; ro

我正在尝试制作一个下载脚本,它捕获对/files/的所有请求并强制下载。脚本完全可以工作,并下载我抛出的任何文件。问题是,当我试图通过try_文件传递扩展名为.php的文件时,以下nginx config会出错:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

  listen 443 ssl;
  listen [::]:443 ssl;

    server_name _;

    root /var/www/localhost/public_html/;
    index index.php index.html index.htm index.txt;


  location /files/ {
        try_files $uri $uri/ /.thedownloadscript.php?file=$uri;
    }

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME /public_html$fastcgi_script_name;    

    include fastcgi_params;
  }

  ssl_certificate /var/www/server.crt;
  ssl_certificate_key /var/www/server.key;
}
/files/file.txt下载该文件

/files/script.php抛出一个404

这两个路径都应该传递给下载脚本,但不是

我曾尝试从“location~.php$”块中删除try_文件,但这会使它输出“未指定输入文件”

我希望有人能帮我


提前感谢。

任何正则表达式位置块优先于同一级别的前缀位置块,除非后者使用
^
修饰符

有关详细信息,请参阅

尝试:


请注意,
location^~/files/
块是前缀位置(而不是正则表达式位置)。

任何正则表达式位置块优先于同一级别的前缀位置块,除非后者使用
^
修饰符

有关详细信息,请参阅

尝试:


请注意,
location^~/files/
块是一个前缀位置(而不是regex位置)。

根据nginx最佳实践,您应该隔离regexp位置:

location / {
    location ~ \.php$ {
        ...
    }
}

location /files/ {
    try_files $uri $uri/ /.thedownloadscript.php?file=$uri;
}

根据nginx最佳实践,您应该隔离regexp位置:

location / {
    location ~ \.php$ {
        ...
    }
}

location /files/ {
    try_files $uri $uri/ /.thedownloadscript.php?file=$uri;
}