Redirect 301 falha com um caminho como destino

1

Estou usando um grande número de redirecionamentos 301, que estão falhando em um novo servidor da Web.

Estamos em testes de pré-produção no novo servidor da web, antes de migrar os sites, mas alguns sites estão falhando com 500 Internal Server Error . O conteúdo, os bancos de dados e os arquivos, são espelhados do antigo para o novo, para que possamos testar se todos os sites funcionam corretamente.

Eu acompanhei esse problema para a instrução mod_alias 'Redirect , que é usada em .htaccess para redirecionar visitantes e mecanismos de pesquisa de conteúdo antigo para páginas novas.

Aparentemente, o servidor Apache requer que o destino seja um URL completo, incluindo protocolo e nome do host.

Redirect 301  /directory/  /target/                        # Not Valid
Redirect 301  /main.html   /                               # Not Valid
Redirect 301  /directory/  http://www.example.com/target/  # Valid
Redirect 301  /main.html   http://www.example.com/         # Valid

Isso contradiz a documentação do Apache para o Apache 2.2 , que afirma:

The new URL should be an absolute URL beginning with a scheme and hostname, but a URL-path beginning with a slash may also be used, in which case the scheme and hostname of the current server will be added.

É claro que verifiquei que estamos usando o Apache 2.2 no servidor antigo e no novo. O servidor antigo é uma caixa do Gentoo com o Apache 2.2.11, enquanto o novo é uma caixa do RHEL 5 com o Apache 2.2.3.

A solução alternativa seria alterar todos os caminhos para URLs completas ou converter as instruções em regras mod_rewrite, mas preferiria o comportamento documentado.

Quais são suas experiências?

    
por Martijn Heemels 12.01.2010 / 11:17

3 respostas

1

Parece que esse comportamento varia entre as versões e distribuições do Apache e contradiz a documentação do Apache (como indicado na pergunta). Muito irritante. Não encontrei nenhum padrão óbvio para qual versão suporta qual comportamento.

Reescrevendo todos os Redirecionamentos para RewriteRules similares faz o truque, já que o RewriteRules é muito mais versátil, mas à custa da legibilidade.

    
por 13.04.2010 / 14:07
1

Quando Redirect 301 URL-path URL-path falhar, você poderá tentar RedirectMatch 301 URL-path URL-path . Ele funcionou para mim em um servidor onde Redirect sem um URL completo como destino estava jogando 500 Erro interno do servidor: Redirecionar para não-URL.

    
por 19.09.2011 / 17:23
0

você tem que usar um redirecionamento com o nome completo do novo servidor web. porque o novo servidor web está em um novo servidor, o apache em seu servidor antigo não pode dizer se fosse apenas pelo caminho-url. você tem que dizer em qual máquina ele está hospedado quando não é o mesmo.

você deve considerar outro ponto: seu antigo servidor será encerrado em algum momento no futuro? o seu novo servidor irá assumir o nome do dns do antigo?

talvez você devesse pensar em apenas alterar o dns depois de migrar todo o site para o novo servidor.

    
por 12.01.2010 / 11:45