Nginx + PHP:将受保护的文件请求重定向到PHP脚本,然后下载该文件

时间:2015-08-11 03:14:53

标签: php redirect nginx permissions rewrite

我有一个/ upload /目录,用户可以上传机密文件。例如:example.com/upload/username/myfile.jpg

我希望这些文件只能由将其上传到自己目录中的人员访问。

在我的Nginx服务器配置中,我首先将包含“upload”的所有位置重定向到PHP文件:

location ^~ /upload/ {
  rewrite ^(.*)$ /dl-file.php?$1 break;
}

所以http://example.com/upload/username/myfile.jpg现在提供dl-file.php。

// Get the url
$url = 'https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

// Function to download the file with the url
download_remote_file_with_curl($url, realpath("./downloads"));

脚本尝试下载与网址http://example.com/upload/username/myfile.jpg关联的文件。但随后Nginx再次将请求重定向到dl-file.php。

所以我最终下载'dl-file.php'而不是'myfile.jpg'。如何在第一次使用Nginx重定向文件请求,然后使用PHP启用下载?

(如果我的工作无效,我会采取不同的方法)

1 个答案:

答案 0 :(得分:0)

如果您使用的是php,则可以使用try_files直接提供脚本,然后执行$my_args = explode('/', $_SERVER['REQUEST_URI']);之类的操作。

location ^~ /upload/ {
    try_files /dl-file.php =404;
    include php_fastcgi.conf; # <- php stuff here
}