2008-12-02 8 views
1

Cela pourrait être un peu hors du stade, mais un ami m'a posé des questions à ce sujet et c'est un peu me dérange. Comment déterminez-vous le chemin actuel dans votre barre d'adresse si le serveur redirige toutes les demandes vers un fichier par défaut, par exemple, index.html.Comment obtenir le chemin de l'URL après une redirection - avec Javascript?

Disons que vous avez entré:

www.example.com/ 

Et la configuration de votre serveur redirige automatiquement cette demande à

www.example.com/index.html 

Mais l'adresse dans la barre d'URL ne change pas! Alors, comment pouvez-vous comprendre en utilisant Javascript que le chemin sur cette URL est index.html? J'ai regardé dans location.pathname mais cela ne me donne que /.

Des idées?

Répondre

4

Le problème est qu'il ne s'agit pas réellement d'une redirection. Lorsque vous tapez 'www.example.com' dans votre navigateur Web, le navigateur génère une requête HTTP comme ce qui suit:

GET/HTTP/1.1 
User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/ 
0.9.8h zlib/1.2.3 libssh2/0.15-CVS 
Host: www.example.com 
Accept: */* 

Notez qu'il est demandé un document nommé littéralement /. Il y a deux réponses possibles par le serveur:

HTTP/1.1 200 OK 
(more headers) 

Content... 

Et

HTTP/1.1 301 Moved Permanently 
Location: (location of redirect) 
(more headers) 

(Optional content) 

Dans l 'affaire n ° 2, vous pouvez obtenir l'emplacement de redirection car il est en fait une redirection. Mais dans le cas n ° 1, le serveur effectue la redirection: il voit une demande pour / et sert à la place le contenu pour quelle que soit sa page d'index (par exemple index.html, , default.aspx, etc.). En ce qui concerne votre navigateur, c'est juste le contenu du document /. Il ne sait pas qu'il a été redirigé.

4

Si la redirection se produit sur le serveur, le navigateur n'en est pas conscient et vous ne pouvez pas accéder à la ressource en cours dans javascript. Par exemple, une servlet peut "transférer" à une autre ressource sur le serveur.

Si le serveur envoie une commande de redirection au navigateur et que le navigateur demande le nouvel URL, le navigateur le sait et vous pouvez l'obtenir.

1

Il n'y a aucun moyen de le faire, sauf en quelque sorte d'intégrer le nom de fichier du serveur Web dans le document. En ce qui concerne le navigateur, il n'y a pas index.html, la page est juste /.

Questions connexes