冗余Nginx位置和重写正则表达式

时间:2014-12-10 16:35:06

标签: nginx url-rewriting rewrite

我有一个有效的位置和重写指令对,但有一个冗余似乎我应该能够优化。它需要/css/20141201-styles.css之类的外部网址,并提供/css/styles.css

location ~ '^/(css|js)/[0-9]{8}-' {
    rewrite '^/(css|js)/[0-9]{8}-(.*)$' /$1/$2;
}

我似乎在做两次工作,一次是匹配,然后再重写。有没有办法在location指令中捕获匹配项,然后在rewrite中使用它们?

location ~ '^/(css|js)/[0-9]{8}-(.*)$' {
    rewrite [something here?] /$1/$2;
}

在Apache中,它看起来像这样:

RewriteRule ^/(css|js)/[0-9]{8}-(.*)$ /$1/$2 [NC,L]

感谢Terra指出alias指令!此location已嵌套在应用location指令的另一个root中,以便处理服务器路径。

location ~ ^/(css|images|js)/ {
    location ~ '^/(css|js)/[0-9]{8}-(.*)$' {
        alias /$1/$2;
    }
    root /server/path/to/web/root;
}

更新

这也行,并且线路较少。 break指令上的rewrite标记会阻止server级别的循环,使just as performant成为alias解决方案。

location ~ ^/(css|images|js)/ {
    rewrite '^/(css|js)/[0-9]{8}-(.*)$' /$1/$2 break;
    root /server/path/to/web/root;
}

1 个答案:

答案 0 :(得分:2)

解决方案1:不要创建单独的位置,只需将rewrite移动到其他位置即可。例如location /

解决方案2:

location ~ ^/(css|js)/[0-9]{8}/ {
    alias /server/path/to/web/root/$1/;
}