2015-10-05 230 views
1

我與nginx 1.8.0的兩個塊有衝突。nginx重寫規則衝突

第一嵌段是提供用於某些類型的文件設置靜態緩存:

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; 
} 

第二塊是一系列由文件類型定義重寫:

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錯誤。如果我將重寫規則更改爲不同的文件類型或將靜態緩存文件塊註釋掉,它將起作用。

我在高速緩存的靜態文件中丟失了什麼,防止在稍後的配置設置中執行重寫?

回答

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工具集。