[英]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.