NGINX Hashbang neu schreiben

8

Ich frage mich, was ein Ort oder Neuschreiben nginx Direktive für Hashbang (#!) URLs aussehen würde. Grundsätzlich werden alle nicht-Hash-gebannten URLs durch den Hashbang wie ein Front-Controller geleitet. Also:

%Vor%

würde zu

führen %Vor%

Ich bin unklar, was die beste Technik hier wäre? Ob man eine if-Anweisung schreibt, um das Vorhandensein des Hashbangs zu überprüfen, oder nur eine generische Neuschreibung, die alle Anfragen filtert ...

    
kylemac 21.03.2011, 15:48
quelle

3 Antworten

11

GETs für Fragment-IDs dürfen / sollten nicht (manche Buggy-Clients senden sie) in einer HTTP-Anfrage erscheinen, so dass Sie unabhängig vom Webserver keine Rewrite-Regel haben können, die ihnen entspricht.

  

Die HTTP-Engine kann keine Annahmen darüber machen. Der Server ist nicht einmal da.

Wenn Sie versucht haben, die erste Anfrage für / redirect an / # zu stellen! Anstatt den Stammindex zu bedienen, würden Sie einen "zu viele Weiterleitungen" -Fehler haben, da der Client zurückkommen würde, um nach / erneut zu fragen (denken Sie daran, dass es die # nicht mit seiner Anfrage senden wird). Sie müssen dies stattdessen mit Javascript für das Indexdokument tun.

Die untere Zeile ist, dass es serverseitig in der GET-Anfrage nicht verfügbar ist. Sogar curl wurde gepatcht , um es nicht mehr zu senden.

Sie könnten nginx location-Anweisungen haben, damit alles andere den Front-Controller erreicht:

%Vor%

Vorsicht vor diesem Ansatz; Ссылка geht viel ausführlicher auf das Debakel von Hashbang bei Gawker und andere Probleme ein, die es umgeben verwenden.

    
jaygooby 30.03.2011, 10:09
quelle
2

Als eine Modifikation des Obigen mache ich nur diese Umleitung für bestimmte Aufrufe und erhalte somit keine potentiellen Rückkopplungen:

%Vor%

Beachten Sie, dass dies für alle Browser mit Ausnahme von Safari funktioniert. Safari leitet Sie ohne Hash an die URL weiter.

    
Mauvis Ledford 19.03.2012 23:02
quelle
-1

Der beste Weg ist die Verwendung der try_files -Direktive:

%Vor%

Angenommen, Ihre Datei index.html enthält die JavaScript-Logik, die den Hash an die richtige Ressource weiterleitet. Der URI bleibt bestehen, was der Besucher angefordert hat, während Nginx die Anfrage einfach an Ihre Indexdatei weiterleitet, wenn keine echte passende Datei für die Anfrage-URL gefunden werden kann.

    
Wes Johnson 15.06.2014 12:21
quelle

Tags und Links