我研究了所有关于 nginx 代理和重写功能的优秀帖子,但无法找到解决我的问题的方法。所以我们来了。我用 vaadin 编写了一个 Web 应用程序,它可以处理以下请求:
http://<server>/#main/search?country=germany&type=songwriter
对于 SEO 优化,我想处理“说话”的 URL,例如:http:///songwriter/germany。所以我认为在 Web 服务器内重写 URL 是解决方案。但无论我尝试什么,我都无法将标签放在请求中并形成最终解决方案!以下是我尝试的方法:
location /songwriter/ {
proxy_set_header Host $host;
proxy_redirect off;
# Option 1 - hastag is encoded
rewrite ^/songwriter/(.+) /#main/suche?land=$1 break;
proxy_pass http://127.0.0.1:8080;
}
我在跟踪中得到的信息是:/%23main/suche land=berlin/。有什么想法吗?
答案1
URL 片段仅用于客户端,绝不会发送到服务器。(由于#
不允许使用文字,因此 nginx URL 会对其进行编码。)如果您的 Web 应用程序滥用 URL 片段进行导航,则它们只能由您的客户端(浏览器中)代码处理。请注意,以这种方式使用 URL 片段并不被视为良好做法。您可能必须大幅重写您的 Web 应用程序才能摆脱它们。