2010-12-15 97 views
0

Existe-t-il un moyen pour un serveur Web d'émettre une redirection qui n'exige pas que le navigateur émette une deuxième requête?Rediriger vers une nouvelle URL sans que le navigateur n'émette une deuxième requête?

Par exemple, le navigateur a demandé http://www.mysite.com/lion, mais le serveur souhaite que le navigateur passe à http://www.mysite.com/jungle. La seule façon dont je sais comment accomplir cela est que le serveur envoie un code d'état 3xx avec l'URL jungle, et le navigateur émet une nouvelle demande pour le récupérer.

Est-il possible pour le serveur de livrer la page jungle en réponse à la demande lion, et de dire au navigateur "Définir votre URL à http://www.mysite.com/jungle"?

Répondre

2

Oui, cela s'appelle la réécriture d'URL. Les deux Apache et IIS ont des modules qui permettent cela.

Pour Apache, dans un fichier .htaccess ou httpd.conf dans un hôte virtuel:

RewriteEngine On 
RewriteRule lion jungle [L] 

Le contenu de la jungle seront envoyés lorsque lion est demandée, sans redirection.

+0

Mais le navigateur va-t-il changer l'URL dans sa barre d'adresse? –

+0

Non. L'URL ne change que lorsque le navigateur demande un URI différent, ce qui n'est pas le cas. Vous ne pouvez pas rediriger et ne pas rediriger. Si vous souhaitez que l'URL change (vous souhaitez que le client, qu'il s'agisse d'un navigateur ou d'un moteur de recherche, sache que l'URI se trouve à un autre emplacement), envoyez l'en-tête de redirection et le code d'état approprié. Gardez à l'esprit que lorsque vous effectuez une redirection, vous n'envoyez que les en-têtes avant que le navigateur ne fasse sa deuxième requête, c'est rapide et ne gaspille pas de bande passante. –

1

Dans ASP.NET, vous pouvez utiliser Server.Transfer(). Cela provoque une page différente à retourner pour la demande en cours.

Notez que le navigateur n'a aucune connaissance de ce qui se passe. Il affichera toujours http://www.mysite.com/lion dans la barre d'adresse même si vous verriez le contenu de http://www.mysite.com/jungle.

Si vous voulez informer le navigateur qu'une autre page est en cours de chargement, alors vous avez besoin d'une redirection en ce qui me concerne.