Wie funktioniert url-rewrite funktioniert?
Wie funktioniert web-server implementiert url-rewrite-Mechanismus und änderungen der Adressleiste des browsers?
Ich verlange nicht, spezifische Informationen zum konfigurieren von apache, nginx, lighthttpd oder anderen!
Ich würde gerne wissen, welche Art von Informationen ist, die an clients gesendet, wenn die Server url umschreiben wollen?
- Werfen Sie einen Blick in RFC 2616, Abschnitt 10.3: ietf.org/rfc/rfc2616.txt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sprechen Sie über server-Seite schreibt (wie Apache-mod-rewrite)? Für diejenigen, die Adressleiste in der Regel nicht ändern (es sei denn, die Weiterleitung erfolgt).
Oder redest du über Umleitungen? Diese werden durchgeführt, indem der server antwortet mit einer HTTP-Codes (301, 302 oder 307) und die Lage im HTTP-header.
Es gibt zwei Arten von Verhalten.
Ist man umschreiben, die andere umleiten.
Umschreiben
Führt der server die substitution für sich selbst, machen Sie eine URL wie
http://example.org/my/beatuful/page
verstanden werden, alshttp://example.org/index.php?page=my-beautiful-page
Mit rewrite, der Kunde sieht nichts und die Umleitung nur intern. Keine URL-änderungen im browser, nur der server versteht es anders.
Redirect
Erkennt der server, dass die Adresse nicht wollte von dem server.
http://example.org/page1
bewegt hat, zuhttp://example.org/page2
, so sagt es der browser mit dem HTTP-3xx-code, was die neue Seite ist. Der client fordert dann für diese Seite statt. Daher die Adresse im browser ändert!Prozess
Der Prozess bleibt der gleiche und auch beschrieben wird durch dieses Diagramm:
Bemerkung Jeden rewrite/redirect löst einen neuen Anruf an den rewrite-Regeln (mit Ausnahmen IIRC)
kann nützlich sein, zu stoppen Schleifen. (Da macht es nicht umschreiben, wenn es schon einmal passiert).
RewriteCond %{REDIRECT_URL} !^$ RewriteRule .* - [L]
ein bisschen mehrGibt es zwei Formen von "URL-rewrite": diejenigen getan, rein in den server und diejenigen, die Umleitungen.
Wenn es rein in den server, es ist eine interne Angelegenheit und nur Fragen mit Bezug auf die dispatch-Mechanismus, implementiert in server. Apache HTTPD, mod_rewrite können dies tun, zum Beispiel.
Wenn es eine Umleitung, die einen status-code, was auf eine Umleitung geschickt, die Antwort, zusammen mit einem
Location
header, der angibt, auf welche URL der browser umgeleitet werden soll (dies muss eine absolute URL).mod_rewrite
können dies auch tun, mit der [R] Flagge.Der status-code ist in der Regel 302 (found), aber es könnte so konfiguriert werden, für andere codes (z.B. 301 oder 307).
Anderen ganz Allgemeinen Gebrauch (oft unbemerkt, weil es in der Regel standardmäßig in der Apache HTTPD) ist die Umleitung auf die URL mit einem nachgestellten Schrägstrich auf ein Verzeichnis. Dies wird implementiert, indem mod_dir:
URL-rewriting verwandeln kann URLs rein auf der server-Seite. Dies ermöglicht die web-Anwendung Entwicklern die Möglichkeit, web-Ressourcen zugänglich, die von mehreren URLs.
Zum Beispiel, der Benutzer anfordern kann
http://www.example.com/product/123
aber Dank umschreiben ist tatsächlich diente eine Ressource vonhttp://www.example.com/product?id=123
. Beachten Sie, dass gibt es keine Notwendigkeit für die angezeigte Adresse in den browser ändern.Die Adresse kann geändert werden, wenn dies gewünscht wird. Für diese, eine ähnliche Zuordnung, wie oben geschieht auf dem server, aber anstatt machen die Ressource an den client zurück, der server schickt einen redirect (301 oder 302 HTTP-code) an den client zurück für die umgeschrieben URL.
Für das obige Beispiel könnte dies so Aussehen:
Client-Anfrage
Server-Antwort
Zu diesem Zeitpunkt, wird der browser eine neue
GET
Anfrage für die URL in derLocation
header.Jeff Atwood hatte einen tollen Beitrag über dieses: http://www.codinghorror.com/blog/2007/02/url-rewriting-to-prevent-duplicate-urls.html
URL-rewriting und forwarding sind zwei völlig verschiedene Dinge. Ein server hat keine Kontrolle über Ihren browser also kann es nicht ändern Sie die URL in Ihrem browser, aber Sie können Fragen Sie Ihren browser auf eine andere URL. Wenn Ihr browser erhält eine Antwort von einem server, es ist völlig bis zu Ihrem browser, um zu bestimmen, was zu tun ist mit dieser Antwort: Folgen Sie der Umleitung zu ignorieren oder wirklich bedeuten und spam die server, bis der server aufgibt. Es gibt keinen "Mechanismus", dass der server verwendet, um die Adresse zu ändern, es ist einfach nur ein Protokoll (HTTP 1.1), dass der server hält durch, wenn eine bestimmte Ressource wurde an einen anderen Speicherort verschoben, damit die 3xx Antworten.