Depurando reescritas e redirecionamentos do Apache

O mod_rewrite e o mod_alias do Apache podem ser muito úteis, mas também podem ser muito difíceis de depurar quando surge um problema. Felizmente, existem algumas coisas que podem ajudar, e como você provavelmente não é a primeira pessoa a tentar reescrever ou redirecionar algo de uma maneira específica, provavelmente conseguirá encontrar a resposta apenas pesquisando de forma inteligente depois de entender. o básico.
O primeiro recurso que utilizo seria o Apache mod_rewrite e mod_alias documentação. Pode parecer tedioso, mas o Apache HTTP Server, na verdade, possui uma das melhores documentações do setor. Se você gastar 10 minutos lendo a documentação real e tentar entendê-la, provavelmente encontrará a maioria de suas perguntas respondidas. Certifique-se de verificar a seção dos documentos mod_rewrite que cobre a diretiva RewriteLogjá que ter um log transforma suposições em algo depurável.

A próxima ferramenta que gosto de usar é o curl, pois mostra os cabeçalhos http e permite ver exatamente o que o cliente e o servidor estão dizendo um ao outro. `curl` é um utilitário bastante padrão que vem instalado em muitas versões do *nix e é disponível para download em muitas plataformas, incluindo Windows, cygwin e Mac OSX. Vejamos um exemplo de redirecionamento 302 “Encontrado” simples:
[code]
$ curl –verbose –head –location exemplo.com
* Prestes a conectar() à porta 80 de example.com (#0)
* Tentando 192.0.43.10… conectado
* Conectado a example.com (192.0.43.10) porta 80 (#0)
> CABEÇA/HTTP/1.1
> Agente do usuário: curl/7.21.7 (i386-redhat-linux-gnu) libcurl/7.21.7 NSS/3.12.10.0 zlib/1.2.5 libidn/1.22 libssh2/1.2.7
> Host: exemplo.com
> Aceitar: */*
>
* HTTP 1.0, assuma próximo após o corpo
HTTP/1.0 302 encontrado
Localização: http://www.iana.org/domains/example/
Servidor: BigIP
* Conexão HTTP/1.0 configurada para se manter ativo!
Conexão: Keep-Alive
Comprimento do conteúdo: 0
<
* Conexão #0 ao host example.com deixada intacta
* Emita outra solicitação para este URL: ‘http://www.iana.org/domains/example/’
* Prestes a conectar() à porta 80 de www.iana.org (#1)
* Tentando 192.0.32.8… conectado
* Conectado a www.iana.org (192.0.32.8) porta 80 (#1)
> HEAD /domínios/exemplo/ HTTP/1.0
> Agente do usuário: curl/7.21.7 (i386-redhat-linux-gnu) libcurl/7.21.7 NSS/3.12.10.0 zlib/1.2.5 libidn/1.22 libssh2/1.2.7
> Anfitrião: www.iana.org
> Aceitar: */*
>
HTTP/1.1 200 OK
< Data: Sexta-feira, 16 de dezembro de 2011 21:22:21 GMT
Data: Sexta-feira, 16 de dezembro de 2011, 21:22:21 GMT
Servidor: Apache/2.2.3 (CentOS)
<Última modificação: Quarta, 09 de fevereiro de 2011 17:13:15 GMT
Última modificação: Quarta, 09 de fevereiro de 2011 17:13:15 GMT
Variar: Aceitar-Codificação
Conexão: fechar
Tipo de conteúdo: texto/html; conjunto de caracteres=UTF-8
<
* Fechando conexão #1
* Fechando conexão #0
[/code]
Se olharmos bem, podemos obter muitas informações sobre a solicitação a partir disso. Você pode ver o código HTTP real do redirecionamento 302 na linha “< HTTP/1.0 302 Found", com o colchete angular esquerdo indicando que esta é uma resposta do servidor (colchetes angulares retos são comandos enviados pelo cliente -- curl , neste caso). O comando curl acima, `curl --verbose --head --location example.com` nos diz que curl deve ser detalhado, deve apenas enviar uma solicitação HTTP "HEAD" em vez de GET, e que deve seguir qualquer "Local: [...]"respostas que recebe do servidor (dizendo para ir para um novo local). Nesse caso, como vimos acima, o curl executará novamente a solicitação com o local atualizado como URL de entrada. Esse comportamento imita isso de navegadores, mas não é o comportamento padrão do curl. Há alguns casos em que poderemos precisar simular um navegador mais de perto. Se seu aplicativo manipula solicitações GET e ignora HEAD, talvez seja necessário omitir '--head' e, em vez disso, basta usar '-o /dev/null' para gravar o arquivo baixado em lugar nenhum. Você também pode deixar isso de fora, o que despejará o código-fonte da página em seu STDOUT (efetivamente o mesmo que '-o -'). Você pode também é necessário especificar uma string de agente do usuário para acionar um comportamento específico do site, como um site para dispositivos móveis. Vamos tentar com example.com novamente. Vamos simular uma solicitação de um iPhone com iOS 5.0 usando Safari, com o comando '--trace -ascii' para o modo geek completo, que nos mostrará ainda mais detalhes que podem ser úteis para conteúdo móvel otimizado. Também usaremos a opção '--limit-rate' para curl para desacelerar a transferência para um rastreamento (celular 2G Velocidades GPRS que uma conexão média pode atingir – 25kbit/seg): [code] $ curl --trace-ascii - --location -o /dev/null --user-agent 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 como Mac OS X) AppleWebKit/534.46 (KHTML, como Gecko) Versão/5.1 Mobile/9A334 Safari/7534.48.3' --limit-rate 25k example.com == Informações: Prestes a conectar() à porta example.com 80 (#0) % Total % Recebido % Xferd Velocidade média Tempo Tempo Tempo Dload atual Carregar Total Gasto Velocidade Esquerda 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0== Informações: Tentando 192.0.43.10... = = Informações: conectado == Informações: Conectado a example.com (192.0.43.10) porta 80 (#0) => Enviar cabeçalho, 198 bytes (0xc6) 0000: GET / HTTP/1.1 0010: User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 como Mac OS X 0050:) AppleWebKit/534.46 (KHTML, como Gecko) Versão/5.1 Mobile/9A33 0090: 4 Safari/7534.48.3 00a4: Host: example.com 00b7: Aceitar: */ * 00c4: == Informações: HTTP 1.0, assuma próximo após o corpo <= Cabeçalho Recv, 20 bytes (0x14) 0000: HTTP/1.0 302 Encontrado <= Cabeçalho Recv, 48 bytes (0x30) 0000: Localização: http://www .iana.org/domains/example/ <= Cabeçalho Recv, 15 bytes (0xf) 0000: Servidor: BigIP == Informações: Conexão HTTP/1.0 definida para manter viva! <= Cabeçalho Recv, 24 bytes (0x18) 0000: Conexão: Keep-Alive <= Cabeçalho Recv, 19 bytes (0x13) 0000: Comprimento do conteúdo: 0 <= Cabeçalho Recv, 2 bytes (0x2) 0000: 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 == Informações: Conexão #0 ao host example.com deixada intacta == Informações: Emitir outra solicitação para este URL: 'http://www.iana.org/domains/example/' == Informações: Prestes a conectar() à porta 80 de www.iana.org (#1) == Informações: Tentando 192.0.32.8. .. == Informações: conectado == Informações: Conectado a www.iana.org (192.0.32.8) porta 80 (#1) => Enviar cabeçalho, 215 bytes (0xd7) 0000: GET /domains/example/ HTTP/1.0 0020: User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 como Mac OS X 0060: ) AppleWebKit/534.46 (KHTML, como Gecko) Versão/5.1 Mobile/9A33 00a0: 4 Safari/7534.48.3 00b4: Host: www.iana.org 00c8: Aceitar: */* 00d5: <= Cabeçalho Recv, 17 bytes (0x11) 0000: HTTP/1.1 200 OK <= Cabeçalho Recv, 31 bytes (0x1f) 0000: Servidor: Apache/2.2.3 (CentOS) <= Cabeçalho Recv, 46 bytes (0x2e) 0000: Última modificação: Quarta, 09 de fevereiro de 2011 17:13:15 GMT <= Cabeçalho Recv, 23 bytes (0x17) 0000: Variar: Aceitar codificação <= Recv cabeçalho, 40 bytes (0x28) 0000: Tipo de conteúdo: texto/html; charset=UTF-8 <= Cabeçalho Recv, 22 bytes (0x16) 0000: Accept-Ranges: bytes <= Cabeçalho Recv, 24 bytes (0x18) 0000: Conexão: fechar <= Cabeçalho Recv, 37 bytes (0x25) 0000: Data : Sexta-feira, 16 de dezembro de 2011 21:47:36 GMT <= Cabeçalho Recv, 14 bytes (0xe) 0000: Idade: 101 <= Cabeçalho Recv, 22 bytes (0x16) 0000: Comprimento do conteúdo: 2966 <= Cabeçalho Recv, 2 bytes (0x2) 0000: <= Dados recebidos, 1170 bytes (0x492) 0000: ..................

Ler:  Como desenvolver um aplicativo móvel usando Python 2024 [The Definitive Guide]

Novas publicações:

Recomendação