NGINX conf文件正则表达式的全新手。我正在运行一个在NGINX Web服务器下运行的PHP脚本。我试图让访问者下载一个与URL不同的附件。例如,如果链接是:
http://mysite.com/attachement/sample.jpg
它实际上将从另一个目录“media / uploaded”
提供文件http://mysite.com/media/uploaded/sample.jpg
根据一些研究,我添加了类似的东西
location /attachment/ {
try_files $uri /media/uploaded/$uri;
}
但它不起作用。我的意图是不要让用户浏览器重定向到正在查看URL的页面,只需下载文件扩展名,如* .png,* .jpg,* .zip等。这个脚本工作正常,在Apache中喜欢这个,但它不是在Nginx。
虽然它并不重要,但是想知道是否也可以让他们下载* .php,* .fla文件而不执行它们是出于明显的安全原因。我记得很久以前使用支持票系统也允许这样做。不知道是否可以从Nginx配置文件中删除它。
谢谢。
答案 0 :(得分: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
,因此正在测试的网址为/media/uploaded/attachment/image.jpg
,但该网址并不存在,可以使用正则表达式修复,就像我在第二种方法中所做的那样,但这样做太多了,你的情况更适合alias
答案 1 :(得分:0)
感谢您的提示。它们都不起作用,但能够添加更多代码来使用别名
location ~ ^/attachment/([^\s]+(?=\.(jpg|gif|png|zip|))\.\2) {
alias /home/websites/public_html/media/uploaded/$1;
}
从另一篇文章中获取提示(忘记它的位置)。谢谢!