Nginx:位置重写指令未捕获所需路径

Nginx:位置重写指令未捕获所需路径

我正在工作的网站为 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/staticrewrite出于同样的原因,您的语句无效。

你所需要的是一个rewrite陈述构成一个新的 URI,无论/version.../字符串后面是什么。将其包装在location堵塞因此正则表达式只在必要时才被评估:

location /ca/pub {
    alias /pub;
}
location /ca/pub/static/version {
    rewrite /version\d*/(.*)$ /ca/pub/static/$1 last;
}

相关内容