我可以在 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
所以我试图在位置匹配器中匹配的模式永远不会工作,因为它永远不会到达服务器。
我正在尝试设置一个包含“#”字符的位置块,以重定向到包含基于 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
所以我试图在位置匹配器中匹配的模式永远不会工作,因为它永远不会到达服务器。