我正在工作的网站为 CSS 文件生成如下所示的 URL。
www.example.com/ca/pub/static/version123/styles.css
它返回 404,因为该version123
部分是动态的并以某种方式生成的,并且没有对应的目录。我正在尝试查看是否可以配置 Nginx,以便上述 URL 获取与此 URL 相同的文件。
www.example.com/ca/pub/static/styles.css
style.css
位于/pub/static/styles.css
。
到目前为止,Nginx 位置块看起来像这样。
location /ca/pub {
alias /pub; # this seems to work
# Supposed to remove the 'version123' portion but doesn't work
location ~ ^/static/version {
rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
}
}
外部块指令似乎有效,因为我可以通过 加载 CSS www.example.com/ca/pub/static/styles.css
。但是,我不确定嵌套位置。如何配置它,以便当我www.example.com/ca/pub/static/version123/styles.css
在浏览器中输入时,返回 CSS 文件?
还要注意的是,如果没有~
,配置是无效的。
nginx: [emerg] location "^/static/version" is outside location "/ca/pub"
答案1
您的嵌套位置无效,因为^
仅匹配以 开头的 URI /static
,并且所有这些 URI 都以 开头/ca/pub/static
。rewrite
出于同样的原因,您的语句无效。
你所需要的是一个rewrite
陈述构成一个新的 URI,无论/version.../
字符串后面是什么。将其包装在location
堵塞因此正则表达式只在必要时才被评估:
location /ca/pub {
alias /pub;
}
location /ca/pub/static/version {
rewrite /version\d*/(.*)$ /ca/pub/static/$1 last;
}