我正在编写一个PHP应用程序,用户可以在其中下载一些文件。并非所有用户都可以下载所有文件,并且会在幕后进行一些复杂的权限检查。
由于这种权限检查,我不想公开文件实际所在的URL,因为我想强制用户始终使用验证其凭据的端点。
在我目前的实现中,这都是使用PHP(fread等)编写的。为了最小化内存消耗,这是作为流实现的,这样PHP主要充当代理。
但我想只使用PHP进行身份验证,然后使用Apache2进行实际托管。寻找选项似乎X-Sendfile将是一个理想的选择。
使用X-Sendfile的唯一问题是它只适用于本地文件,而我的文件位于远程存储服务器(不是我的网络服务器)上。
基本上我有一个直接链接到我的存储服务器(我想隐藏):
https://storage.example.com/the-pet-goat.pdf
用户与之交互的公共链接:
https://www.example.com/randomized-id/download
我希望当用户转到https://www.example.com/randomized-id/download时,会检查其凭据,如果成功,则应该(无形地)将其重定向到存储服务器上的文件。
有没有办法实现这一点(使用Apache)? 我找到了X-Accel-Redirect,但那是NGinx
我在SO上发现了一个类似的问题: Alternative to X-sendfile in Apache for sending file given a URL? 但是那个是专门针对S3,Apache(和Ruby on Rails),而这个问题对于Apache来说更通用。