繁体   English   中英

nginx:php文件扩展名不适用于try_files

[英]nginx: php file extension does not work with try_files

我正在尝试制作一个下载脚本,将所有请求捕获到/ files /并强制下载。 该脚本完全有效,并下载我抛出的任何文件。 问题是,当我尝试通过try_files传递扩展名为.php的文件时,以下nginx配置会混乱:

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_files,但这使得输出“未指定输入文件”

我希望有人可以帮助我。

提前致谢。

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

请参阅此文档了解详细信息

尝试:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM