Qu'est-ce que les doubles barres obliques souvent trouvées dans les URL signifient exactement?
Par exemple:
http://www.example.com/A/B//C/
S'il vous plaît noter que je ne me réfère pas au début juste après http:
.
url
site-structure
aneuryzm
la source
la source
Comme mentionné par @RandomBen , la double barre oblique est probablement le résultat d'une erreur quelque part.
Que la page se charge n'a rien à voir avec le navigateur , mais plutôt que le serveur ignore la barre oblique supplémentaire. Le navigateur ne fait rien de spécial avec des barres obliques supplémentaires dans l'URL, il les envoie simplement dans la requête:
Il semble que les versions actuelles d'Apache et d'IIS ignorent les barres obliques supplémentaires lors de la résolution du chemin d'accès et renvoient le document qui aurait été renvoyé si l'URL ne comportait pas de barres obliques supplémentaires. Cependant , les navigateurs (j'ai testé IE 8 et Chrome 9) sont perturbés par les URL relatives (contenant les composants de chemin d'accès parent) des ressources de la page, ce qui produit des résultats erronés. Par exemple, si une page a:
Lors du chargement de la page
/a/b/c/
, le navigateur demandera/a/style.css
. Mais si - pour une raison quelconque -/a/b//c/
est demandé (et le serveur ignore la barre oblique supplémentaire), le navigateur finira par demander/a/b/style.css
, ce qui n'existera pas. Oups, la page a l'air moche.(Cela ne se produira évidemment pas si l'URL n'a pas de composant de chemin d'accès parent (
..
) ou est absolue.)Il est de mon avis que Apache et IIS (et probablement d' autres) agissent à tort comme
/a/b/c/
et/a/b//c/
représentent techniquement deux ressources différentes. Selon la RFC 2396 , chaque barre oblique est significative:Donc, se
/a/b/c/
compose de trois segments: "a", "b" et "c";/a/b//c/
se compose en fait de quatre: "a", "b", "" (la chaîne vide) et "c". Le fait que la chaîne vide soit ou non un répertoire de système de fichiers valide est un détail de la plate-forme du serveur. (Et logiquement, cela signifie que les navigateurs fonctionnent correctement lors de l'analyse syntaxique d'URL relatives avec des composants de chemin d'accès parent - dans mon exemple, ils dépassent le répertoire "c" et le répertoire "", nous laissant la possibilité de demanderstyle.css
à "b".)Si vous utilisez Apache avec
mod_rewrite
, il existe une solution simple :Cela générera une
301 Moved Permanently
redirection HTTP afin que toutes les doubles barres obliques soient supprimées de l'URL.la source
mod_rewrite
solution tienne compte des barres 3, 4, ... et des barres obliques? Quelque chose dans le genre de/{2,}
? (En supposant qu'Apache permette ce type de quantificateur, je ne le connais pas trop bien)a/b
ila//b
existe effectivement deux chemins d'URL distincts, mais rien n'empêche le serveur de renvoyer la même ressource pour les deux s'ils le souhaitent. Je conviens toutefois avec vous que, dans la pratique, renvoyer une redirection 301 semble plus utile.a//b
un répertoire (voir l'exemple de la feuille de style ci-dessus).La double barre oblique a une signification lorsqu'elle est utilisée dans les URL de ressources. Par exemple, quand il s'agit d'un utilisateur en CSS pour une URL d'une image d'arrière-plan:
Ici, cela signifie que cette image d'arrière-plan est extraite d'un domaine différent de celui de la page Web actuelle. Ou en d'autres termes,
http://
peut être écrit comme//
si vous l'utilisiez dans les URL de ressources.Mais cette double barre oblique entre les URL (par exemple
/a//b/c/d.htm
:) n'a aucune signification.la source
Comme indiqué précédemment, certains serveurs sont configurés pour ignorer une double barre oblique dans le chemin de l'URL, contrairement à l'hébergement statique Amazon S3. Si vous souhaitez les gérer / les ignorer dans ce cas, vous pouvez utiliser les règles de redirection dans le panneau des propriétés.
Si vous voulez ignorer une double barre oblique après le nom de domaine, vous pouvez utiliser quelque chose comme ceci:
Vous pouvez probablement aussi les trouver et les remplacer, mais cela me suffisait.
la source