
Ich habe alle tollen Beiträge zu Nginx-Proxy und Rewrite-Funktionalität studiert, konnte aber keine Lösung für mein Problem finden. Also, hier sind wir. Ich habe eine Webanwendung mit Vaadin geschrieben, die die folgende Anfrage verarbeiten kann:
http://<server>/#main/search?country=germany&type=songwriter
Zur SEO-Optimierung möchte ich „sprechende“ URLs verarbeiten, wie: http:///songwriter/germany. Daher dachte ich, dass URL-Umschreiben innerhalb des Webservers die Lösung ist. Aber was auch immer ich versuchte, ich kann den Hashtag nicht in die Anfrage einfügen und die endgültige Lösung bilden! Folgendes habe ich versucht:
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;
}
Was ich in der Ablaufverfolgung erhalte, ist: /%23main/suche land=berlin/. Irgendeine Idee?
Antwort1
Das URL-Fragment ist nur clientseitig und wird nie an den Server gesendet. (Da der Literalwert #
dort nicht zulässig ist, kodiert nginx URL ihn.) Wenn Ihre Webanwendung URL-Fragmente zur Navigation missbraucht, können diese nur von Ihrem clientseitigen (im Browser) Code verarbeitet werden. Beachten Sie, dass die Verwendung von URL-Fragmenten auf diese Weise nicht als gute Praxis gilt. Sie müssen Ihre Webanwendung wahrscheinlich erheblich umschreiben, um sie loszuwerden.