nginx重写规则冲突

时间:2015-10-05 21:08:06

标签: caching nginx url-rewriting rewrite

我与nginx 1.8.0的两个块发生冲突。

第一个块是为某些文件类型设置静态缓存:

location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf)$ {
  add_header "Access-Control-Allow-Origin" "*";
  access_log off;
  log_not_found off;
  expires max;
}

第二个块是由filetype:

定义的一系列重写
location /files {
rewrite ^/files/master\.([0-9]+)?\.css$ /min/?g=css&456 break;
rewrite ^/files/master\.([0-9]+)?\.js$ /min/?g=js&456 break;
rewrite ^/files/second\.([0-9]+)?\.js$ /min/?g=jsa&456 break;
}

重写结果为404.使用静态缓存规则中定义的文件类型的任何重写都会导致404错误。如果我将重写规则更改为不同的文件类型或注释掉静态缓存文件块,它就可以工作。

我在缓存静态文件中缺少哪些内容阻止在以后的配置设置中执行重写?

1 个答案:

答案 0 :(得分:0)

在咬牙切齿之后,我最终将重定向更改为try_files参数。 conf文件中的参数必须高于静态缓存文件。

location ~ ^/files/master\.([0-9]+)?\.css$ {
   try_files $uri /min/?g=css&456;
}   
location ~ ^/files/master\.([0-9]+)?\.js$ {
   try_files $uri /min/?g=js&456;
} 
location ~ ^/files/second\.([0-9]+)?\.js$ {
   try_files $uri /min/?g=jsa&456;
}

这将允许我运行minify工具集。