2010-12-15 10 views
0

Gibt es eine Möglichkeit, dass ein Webserver eine Weiterleitung ausgibt, bei der der Browser keine zweite Anfrage stellen muss?Umleiten zu einer neuen URL, ohne dass der Browser eine zweite Anfrage stellt?

Zum Beispiel hat der Browser http://www.mysite.com/lion angefordert, aber der Server möchte, dass der Browser den Standort in http://www.mysite.com/jungle ändert. Der einzige Weg, wie ich das erreichen kann, ist, dass der Server einen 3xx Statuscode mit der URL jungle sendet und der Browser eine neue Anfrage zum Abrufen ausgibt.

Ist es möglich, dass der Server die Seite jungle in Reaktion auf die Anfrage lion liefert, und sagen Sie einfach dem Browser "Setzen Sie Ihre URL auf http://www.mysite.com/jungle"?

Antwort

2

Ja, es heißt URL-Umschreiben. Sowohl Apache als auch IIS haben Module, die dies erlauben.

Für Apache, in einer .htaccess-Datei oder httpd.conf in einem virtuellen Host:

RewriteEngine On 
RewriteRule lion jungle [L] 

Der Inhalt Dschungel geschickt wird, wenn Löwe angefordert wird, ohne eine Umleitung.

+0

Aber wird der Browser die URL in seiner Adressleiste ändern? –

+0

Nein. Die URL ändert sich nur, wenn der Browser einen anderen URI anfordert, was nicht der Fall ist. Sie können nicht umleiten und nicht umleiten. Wenn Sie die URL ändern möchten (d. H. Sie möchten, dass der Client, sei es ein Browser oder ein Such-Crawler, den URI an einem anderen Ort kennt), sollten Sie den Redirect-Header und den entsprechenden Statuscode senden. Denken Sie daran, dass Sie bei einer Weiterleitung nur Kopfzeilen senden, bevor der Browser die zweite Anforderung stellt, die Daten schnell sind und keine Bandbreite verschwenden. –

1

In ASP.NET können Sie Server.Transfer() verwenden. Dies bewirkt, dass für die aktuelle Anforderung eine andere Seite zurückgegeben wird.

Beachten Sie, dass der Browser keine Kenntnis hat, dass dies geschieht. Es würde immer noch http://www.mysite.com/lion in der Adressleiste anzeigen, obwohl Sie den Inhalt von http://www.mysite.com/jungle sehen würden.

Wenn Sie den Browser informieren möchten, dass eine andere Seite geladen wird, brauchen Sie eine Weiterleitung, soweit es mich betrifft.