Te recomendamos que pruebes esta resolución en un entorno controlado antes de enviarlo a producción, saludos.
Solución:
Como mencionó @RandomBen, lo más probable es que la doble barra sea el resultado de un error en alguna parte.
Que la página cargue no tiene nada que ver con el navegadorsino que el servidor ignora la barra adicional. El navegador no hace nada especial con barras diagonales adicionales en la URL, simplemente las envía en la solicitud:
GET /A/B//C/D HTTP/1.1
Host: www.example.com
...
Parece que las versiones actuales de Apache e IIS ignorarán las barras inclinadas adicionales mientras resuelven la ruta y devolverán el documento que se habría devuelto si la URL no tuviera barras inclinadas adicionales. Sin embargo, los navegadores (probé IE 8 y Chrome 9) se confunden con cualquier URL relativa (que contiene componentes de ruta principal) de recursos en la página, lo que produce malos resultados. Por ejemplo, si una página tiene:
Al cargar la página /a/b/c/
el navegador solicitará /a/style.css
. Pero si, por la razón que sea,/a/b//c/
se solicita (y el servidor ignora la barra adicional), el navegador terminará solicitando /a/b/style.css
, que no existirá. Vaya, la página se ve fea.
(Obviamente, esto no sucederá si la URL no tiene un componente de ruta principal (..
) o es absoluto.)
Es mi opinión que Apache e IIS (y probablemente otros) están actuando incorrectamente como /a/b/c/
y /a/b//c/
técnicamente representan dos recursos diferentes. De acuerdo con RFC 2396, cada barra inclinada es significativa:
path = [ abs_path | opaque_part ]
path_segments = segment *( "/" segment )
segment = *pchar *( ";" param )
param = *pchar
pchar = unreserved | escaped |
":" | "@" | "&" | "=" | "+" | "$" | ","
Asi que, /a/b/c/
consta de tres segmentos: “a”, “b” y “c”; /a/b//c/
en realidad consta de cuatro: “a”, “b”, “” (el vacío string), y C”. Sea o no el vacío string es un directorio de sistema de archivos válido es un detalle de la plataforma del servidor. (Y lógicamente, esto significa que los navegadores están funcionando realmente correctamente al analizar las URL relativas con los componentes de la ruta principal; en mi ejemplo, superan el directorio “c” y el directorio “”, dejándonos solicitar style.css
desde B”.)
Si está utilizando Apache con mod_rewrite
hay una solución bastante simple:
# remove multiple slashes anywhere in url
RewriteCond %REQUEST_URI ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
Esto emitirá un HTTP 301 Moved Permanently
redirigir para que las barras dobles se eliminen de la URL.
Eso es un error en el código de los programadores/desarrolladores. Si comparas estas dos URL:
http://www.example.com/A/B/C/
http://www.example.com/A/B//C/
Se ven diferentes, pero si visitara alguno, ambos funcionarían en la mayoría de los navegadores modernos.
Esto es algo que quieres arreglar. Si tiene la doble barra, podría confundir a los rastreadores web de Google y hacerles pensar que hay 2 versiones de la página.
La barra inclinada doble tiene un significado cuando se usa en URL de recursos. Por ejemplo, cuando es usuario en CSS para una URL de una imagen de fondo:
.classname
background : url("//example.com/a/b/c/d.png");
Aquí significa que esta imagen de fondo se obtiene de un dominio diferente al dominio de la página web actual. O en otras palabras, http://
puede escribirse como simplemente //
al usar eso en URL de recursos.
Pero esta doble barra entre las URL (por ejemplo: /a//b/c/d.htm
) no tiene ningún significado.