Nginx + PHP: перенаправить защищенный запрос файла на PHP-скрипт, а затем загрузить файл

У меня есть каталог / upload /, где пользователи могут загружать конфиденциальные файлы. Пример: example.com/upload/username/myfile.jpg

Я хочу, чтобы файлы были доступны только пользователю, загрузившему их в свой собственный каталог.

В моей конфигурации сервера Nginx я сначала перенаправляю все местоположение, содержащее «загрузку» в файл 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")); 

Сценарий пытается загрузить файл, связанный с URL http://example.com/upload/username/myfile.jpg . Но затем Nginx снова перенаправляет запрос на dl-file.php.

Поэтому я в конечном итоге загружаю 'dl-file.php' вместо 'myfile.jpg'. Как я могу перенаправить запрос файла в первый раз с помощью Nginx, но затем включить загрузку с PHP?

(Я открыт для другого подхода, если мой не будет работать)

Если вы используете php, вы можете использовать try_files для непосредственного обслуживания вашего скрипта, а затем сделать что-то вроде $my_args = explode('/', $_SERVER['REQUEST_URI']); ,

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