我可以在 Nginx 位置匹配器中使用 URL 的 # "fragment" 部分吗?

Can I use # "fragment" portion of URL in the Nginx Location matcher?

我正在尝试设置一个包含“#”字符的位置块,以重定向到包含基于 AngularJS 的应用程序的后端服务器。 AngularJS HashLocationStrategy 引入了基于“#”的路由规则。所以我基本上希望任何以“#”开头的 URL 都应该重定向到我的后端服务器,但是 Nginx 路由无法做到这一点。

...
...
location ~ \/\#\/app.*$ {
    # backend server routing
}

location / {
    # redirects to static website
}
...
...

但是这个位置映射不起作用。例如:http://<hostname>/#/app 应该重定向到后端服务器,但最终重定向到静态网站的 index.html,因为第二个位置块匹配 /.

我也尝试设置 location 块,匹配器不包含“#”字符(即 location ~ ^.*app.*$ {}),但它没有用。它仍然重定向到 index.html

有没有办法配置 Nginx 在查看第二个位置块之前遵循第一个位置块。

不,我们不能根据 fragment(即从 # 开始)设置 Nginx 位置匹配器,因为它永远不会发送到服务器。感谢@RichardSmith 的澄清(参考评论部分)

The part of the URL from # onwards (called the fragment) is never sent to the server. It is used by the browser or a client-side JS application - @RichardSmith

所以我试图在位置匹配器中匹配的模式永远不会工作,因为它永远不会到达服务器。