nginx别名语法

时间:2011-10-25 08:39:36

标签: regex nginx alias

我正在尝试使用以下语法为网站中某些图片的位置添加别名:

location ~/^apple-touch-icon(.*)\.png$ {
 alias /opt/web_alpha/img/$1;
 } 

是正确的还是我想念别的东西 在nginx的access.log中,我收到了这条消息:

  

“GET /apple-touch-icon.png HTTP / 1.1”404 142

但在浏览器中它显示了索引页

而且我对nginx中的别名和重写感到困惑,我应该使用

2 个答案:

答案 0 :(得分:5)

服务器位置:

location ~ ^/(apple-touch-icon|browserconfig|favicon|mstile)(.*)\.(png|xml|ico)$ {
    root /home/user/project/static/images/favs;
}

on favs dir:

$ ls -1 static / images / favs /

apple-touch-icon-114x114.png
apple-touch-icon-120x120.png
apple-touch-icon-144x144.png
apple-touch-icon-152x152.png
apple-touch-icon-57x57.png
apple-touch-icon-60x60.png
apple-touch-icon-72x72.png
apple-touch-icon-76x76.png
apple-touch-icon-precomposed.png
apple-touch-icon.png
browserconfig.xml
favicon-160x160.png
favicon-16x16.png
favicon-196x196.png
favicon-32x32.png
favicon-96x96.png
favicon.ico
mstile-144x144.png
mstile-150x150.png
mstile-310x150.png
mstile-310x310.png
mstile-70x70.png

答案 1 :(得分:2)

您的正则表达式不正确。首先,您需要位置类型指示符〜和正则表达式的开头之间的空格。其次,^表示字符串的开头,所以/ ^永远不会匹配任何东西。另外,由于您要从文件名中删除扩展名,我相信nginx最终会将该文件作为默认的mime类型提供,因此您应该在该位置设置default_type image / png:

location ~ ^/apple-touch-icon(.*)\.png$ {
  default_type image/png;
  alias /opt/web_alpha/img/$1;
}
编辑:我误解了所需要的内容。要更改以/ apple-touch-icon开头的任何内容的根目录,请使用:

location ^~ /apple-touch-icon {
  root /opt/web_alpha/img;
}

这是一个前缀匹配,不会被正则表达式位置覆盖。