NGINX从后端的另一个URL下载文件

NGINX从后端的另一个URL下载文件,url,redirect,nginx,download,hide,Url,Redirect,Nginx,Download,Hide,NGINX conf文件regex完全是新手。我正在运行一个在nginxweb服务器下运行的PHP脚本。我试图让访问者下载一个与URL不同的附加文件。例如,如果链接为: http://mysite.com/attachement/sample.jpg 它实际上将从另一个目录“media/upload”提供文件 根据一些研究,我添加了如下内容 location /attachment/ { try_files $uri /media/uploaded/$uri; } 但它不

NGINX conf文件regex完全是新手。我正在运行一个在nginxweb服务器下运行的PHP脚本。我试图让访问者下载一个与URL不同的附加文件。例如,如果链接为:

http://mysite.com/attachement/sample.jpg
它实际上将从另一个目录“media/upload”提供文件

根据一些研究,我添加了如下内容

location /attachment/ {      
    try_files $uri /media/uploaded/$uri;
}
但它不起作用。我的意图是不让用户浏览器重定向到查看URL的页面,只需下载文件扩展名,如*.png、*.jpg、*.zip等。这个脚本在Apache中工作得很好,但在Nginx中没有

虽然这并不重要,但出于明显的安全原因,我想知道是否也可以让他们下载*.php、*.fla文件而不执行它们。我记得很久以前使用的支持票系统也允许这样做。不知道是否有可能从Nginx conf文件中删除它


谢谢。

如果您想让它们像一面精确的镜子,最简单的方法是使用
别名

location /attachment/ {
    alias /media/uploaded;
}
如果要使用
try_files
,则需要指定
root

location ~ /attachment/(.*) {
    root /media/uploaded;
    try_files $1 =404; # or replace '=404' with any fallback rule
}

您的规则不起作用,可能是因为
$uri
已经包含
/attachment
,所以正在测试的URL是
/media/upload/attachment/image.jpg
,它不存在,可以像我在第二种方法中那样使用regex进行修复,但这太费事了,您的案例更适合于
alias

如果您希望它们像一面镜子,最简单的方法是使用
alias

location /attachment/ {
    alias /media/uploaded;
}
如果要使用
try_files
,则需要指定
root

location ~ /attachment/(.*) {
    root /media/uploaded;
    try_files $1 =404; # or replace '=404' with any fallback rule
}

您的规则不起作用,可能是因为
$uri
已经包含
/attachment
,所以正在测试的URL是
/media/upload/attachment/image.jpg
,它不存在,可以像我在第二种方法中那样使用regex进行修复,但这太费事了,您的案例更适合使用alias,谢谢您的提示。它们都不起作用,但能够通过alias添加更多代码

location /attachment/ {
    alias /media/uploaded;
}
location  ~ ^/attachment/([^\s]+(?=\.(jpg|gif|png|zip|))\.\2) {
    alias /home/websites/public_html/media/uploaded/$1;
}

从另一个帖子得到提示(忘了在哪里了)。谢谢

谢谢你的提示。它们都不起作用,但能够通过alias添加更多代码

location  ~ ^/attachment/([^\s]+(?=\.(jpg|gif|png|zip|))\.\2) {
    alias /home/websites/public_html/media/uploaded/$1;
}

从另一个帖子得到提示(忘了在哪里了)。谢谢

在服务器块级别的配置中是否有适当的
根目录
?在服务器块级别的配置中是否有适当的
根目录