我有一个有效的位置和重写指令对,但有一个冗余似乎我应该能够优化。它需要/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;
}
答案 0 :(得分:2)
解决方案1:不要创建单独的位置,只需将rewrite
移动到其他位置即可。例如location /
。
解决方案2:
location ~ ^/(css|js)/[0-9]{8}/ {
alias /server/path/to/web/root/$1/;
}