O que as barras duplas frequentemente encontradas nos URLs significam exatamente?
Por exemplo:
http://www.example.com/A/B//C/
Observe que não estou me referindo ao começo logo depois http:
.
url
site-structure
aneuryzm
fonte
fonte
Conforme mencionado por @RandomBen , a barra dupla é provavelmente o resultado de um erro em algum lugar.
O carregamento da página não tem nada a ver com o navegador , mas o servidor ignora a barra extra. O navegador não faz nada de especial com barras extras no URL, apenas as envia na solicitação:
Parece que as versões atuais do Apache e do IIS ignoram as barras extras ao resolver o caminho e retornam o documento que seria retornado se a URL não tivesse barras extras. No entanto , os navegadores (testei o IE 8 e o Chrome 9) ficam confusos com qualquer URL relativo (contendo componentes do caminho pai) de recursos na página, o que produz resultados ruins. Por exemplo, se uma página tiver:
Ao carregar a página
/a/b/c/
, o navegador solicitará/a/style.css
. Mas se, por qualquer motivo,/a/b//c/
for solicitado (e o servidor ignorar a barra extra), o navegador acabará solicitando/a/b/style.css
, o que não existirá. Ops, a página parece feia.(Isso obviamente não acontecerá se o URL não tiver um componente de caminho pai (
..
) ou for absoluto.)É minha opinião que o Apache e IIS (e provavelmente outros) estão agindo incorretamente como
/a/b/c/
e/a/b//c/
tecnicamente representam dois recursos diferentes. De acordo com a RFC 2396 , cada barra é significativa:Portanto,
/a/b/c/
consiste em três segmentos: "a", "b" e "c";/a/b//c/
na verdade consiste em quatro: "a", "b", "" (a sequência vazia) e "c". Se a cadeia vazia é ou não um diretório de sistema de arquivos válido é um detalhe da plataforma do servidor. (E logicamente, isso significa que os navegadores estão realmente operando corretamente ao analisar URLs relativos com componentes do caminho pai - no meu exemplo, eles passam além do diretório "c" e do diretório "", deixando-nos solicitarstyle.css
"b".)Se você estiver usando o Apache
mod_rewrite
, há uma correção bem simples :Isso emitirá um
301 Moved Permanently
redirecionamento HTTP, para que quaisquer barras duplas sejam removidas da URL.fonte
mod_rewrite
solução levasse em conta 3, 4, ... barras também? Algo ao longo das linhas de/{2,}
? (Assumindo Apache permite esse tipo de quantificador, eu não estou muito familiarizado com ele)a/b
e, dea//b
fato, existem dois caminhos de URL distintos, mas nada proíbe o servidor de retornar o mesmo recurso para os dois, se desejar. No entanto, concordo com você que, na prática, retornar um redirecionamento 301 pareceria mais útil.a//b
como um diretório (veja o exemplo da folha de estilo acima).A barra dupla tem um significado quando é usada nos URLs de recursos. Por exemplo, quando é usuário em CSS para um URL de uma imagem de plano de fundo:
Aqui, significa que esta imagem de plano de fundo está sendo buscada em um domínio diferente do domínio da página da web atual. Ou, em outras palavras,
http://
pode ser escrito exatamente//
quando usado nos URLs dos recursos.Mas essa barra dupla entre os URLs (por exemplo
/a//b/c/d.htm
:) não tem nenhum significado.fonte
Como mencionado, alguns servidores estão configurados para ignorar uma barra dupla no caminho da URL, mas a hospedagem estática do Amazon S3 não. Se você quiser manipulá-los / ignorá-los nesse caso, poderá usar as Regras de redirecionamento no painel de propriedades.
Se você deseja ignorar uma barra dupla após o nome do domínio, use algo como isto:
Você provavelmente também pode encontrá-los e substituí-los por toda parte, mas isso foi o suficiente para mim.
fonte