1

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

http://mysite.com/attachement/sample.jpg

它实际上会从不同的目录“媒体/上传”中提供文件

http://mysite.com/media/uploaded/sample.jpg

根据一些研究,我添加了类似这样的内容

location /attachment/ {      
    try_files $uri /media/uploaded/$uri;
}

但它不起作用。我的意图不是让用户浏览器重定向到正在查看 URL 的页面,只需下载 *.png、*.jpg、*.zip 等文件扩展名。这个脚本在 Apache 中运行良好,但它不是在 Nginx 中。

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

谢谢你。

4

2 回答 2

1

如果你想让它们像一面精确的镜子,最简单的方法是使用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/uploaded/attachment/image.jpg不存在,可以像我在第二种方法中那样使用正则表达式修复它,但是工作量太大,您的情况更适合alias

于 2013-10-27T20:46:49.427 回答
0

感谢您的提示。他们都没有工作,但能够使用别名添加更多代码来做到这一点

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

从另一个帖子中获得小费(忘记它在哪里)。谢谢!

于 2013-10-28T02:25:43.233 回答