У меня есть каталог / 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 }