Eu realmente não notei esse redirecionamento (301) ao solicitar um URL como este sem barra ("/") no final: http://server/directory
O servidor receberá um cabeçalho 301 Redirect Permanent com um cabeçalho Location localizado http://server/directory/
.
Veja este exemplo ao vivo:
Solicitação de usuário:
GET /social HTTP/1.1
( http://192.168.1.111/social )
Servidor Apache Responda:
HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/
Solicitação de usuário:
GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )
Servidor Apache Responda:
HTTP/1.1 200 OK
Apache access.log:
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
O diretório / social / contém um index.html
arquivo.
Software Apache: Apache/2.2.22 (Ubuntu)
Opções de Diretório:Options Indexes FollowSymLinks MultiViews
Então, minha pergunta é: por que o apache está fazendo isso? E como impedir o redirecionamento e enviar index.html
diretamente? Os clientes precisam enviar duas solicitações, o que é realmente desnecessário. E talvez alguns dos clientes não permitam redirecionamentos e não possam acessar o site sem a barra final ("/").
Não quero desativar o redirecionamento. Não quero que o servidor envie a resposta diretamente sem nenhum redirecionamento. Mesmo ao solicitar /social
.
O apache foi projetado para redirecionar essas solicitações? O servidor poderia simplesmente enviar os dados sem redirecionar, certo? Devo usar o mod_rewrite
para evitar isso? Ou outra configuração? Ou devo deixar assim e adicionar uma barra no final de todos os links html e viver com alguns redirecionamentos?
O que é que vocês acham?
/social
no seu exemplo.index.html
sem redirecionamento/social
. (Além disso, apenas, em geral, com o mesmo conteúdo em vários URLs geralmente não é desejado.)Respostas:
O envio dos dados sem redirecionamento quebraria os links relativos. Se
http://server/directory
contiverfile
, o URL completo para isso seriahttp://server/directory/file
. Um link especificado como<a href="file">
indicaráhttp://server/directory/file
se o URL base éhttp://server/directory/
, mas se fosse apenashttp://server/directory
o URL base, ele apontaria parahttp://server/file
ele, que não é o resultado pretendido.O Apache poderia ter gerado a listagem de diretórios de duas maneiras diferentes, dependendo da URL, em vez de redirecionar. No entanto, isso não funcionaria se houvesse um
index.html
arquivo no diretório Então o Apache está usando a abordagem, que funciona nos dois casos.Esse não é um comportamento novo, uma década atrás o Apache estava se comportando da mesma maneira. Clientes que não podem manipular um redirecionamento deveriam ter sido corrigidos agora. Mas, para qualquer cliente que não pode manipular um redirecionamento, o Apache deve enviar um pequeno arquivo html com um link que pode ser seguido.
fonte
mod_dir
adiciona esse redirecionamento e você pode desativá-lo com umaDirectorySlash Off
diretiva.Observe, no entanto, que desativar o redirecionamento da barra final pode causar a quebra de algumas páginas. Se a página que está sendo retornada contiver links relativos, esses URLs serão resolvidos de forma diferente se a página for veiculada sem a barra final.
fonte