Nginx:使用 proxy_pass 和 URL 参数以及特殊字符重写 URL

Nginx:使用 proxy_pass 和 URL 参数以及特殊字符重写 URL

我研究了所有关于 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 应用程序才能摆脱它们。

相关内容