Dominando o Redirecionamento com mod_rewrite no Apache

Se você está gerenciando um site que requer redirecionamento de tráfego de um domínio para outro, enquanto preserva o acesso a certos caminhos, o mod_rewrite no Apache pode ser seu melhor aliado. Neste post, abordaremos como redirecionar todas as solicitações, exceto um caminho específico, como /audio, usando mod_rewrite.

O Problema

Muitos webmasters se encontram em uma situação onde precisam redirecionar o tráfego para um novo domínio, mas querem permitir que solicitações específicas passem sem alterações. Por exemplo, se você está fazendo a transição de meudominio.exemplo para novodominio.exemplo, e deseja que todo o tráfego seja redirecionado, exceto as solicitações para /audio, é aí que o mod_rewrite entra em cena.

Problemas Comuns de Sintaxe

A tentativa original feita por um usuário para configurar o redirecionamento incluiu um uso complexo de expressões regulares e condições avançadas. Embora a intenção estivesse correta, o uso do HTTP_HOST no RewriteCond foi mal orientado, pois não inclui o caminho da solicitação.

A Solução

Para alcançar o redirecionamento desejado enquanto permite o acesso ao caminho /audio, sua configuração do Apache deve ser ajustada da seguinte forma:

Configuração Passo a Passo

  1. Ative o Módulo de Reescrita: Primeiro, certifique-se de que o módulo de reescrita está ativado.

    RewriteEngine on
    
  2. Configure a Condição: Use a variável REQUEST_URI para verificar se a solicitação NÃO é para o caminho /audio.

    RewriteCond %{REQUEST_URI} !^/audio
    
  3. Defina a Regra de Reescrita: Crie uma regra que trata do redirecionamento para o novo domínio.

    RewriteRule ^(.*)$ http://www.novodominio.exemplo [L,R=301]
    

Juntando Tudo

Na sua configuração do VirtualHost, deve ficar algo como isto:

<VirtualHost *:80>
    ServerAdmin me@meudominio.exemplo
    DocumentRoot "/var/www/meudominio.exemplo/htdocs"
    ServerName www.meudominio.exemplo
    ServerAlias meudominio.exemplo

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/audio
    RewriteRule ^(.*)$ http://www.novodominio.exemplo [L,R=301]

    RewriteLog /caminho/para/arquivo/log
    RewriteLogLevel 3

    ErrorLog logs/error_log
    CustomLog logs/access_log common
</VirtualHost>

Depuração da Sua Configuração

Se você ainda encontrar problemas após configurar tudo, considere ativar o log para ver as condições e regras em ação:

  • Use o RewriteLog para especificar um arquivo de log e definir um nível de log alto o suficiente para capturar detalhes relevantes.
RewriteLog /caminho/para/arquivo/log
RewriteLogLevel 3

Compreendendo os Logs

Quando você verificar os logs após implementar as regras acima, certifique-se de que as solicitações para /audio não atingem a regra de reescrita.

Conclusão

Configurar o redirecionamento de URL usando mod_rewrite é uma maneira poderosa de gerenciar o tráfego, enquanto garante que caminhos específicos permaneçam acessíveis. Ao focar na configuração correta e entender o comportamento de REQUEST_URI, você pode resolver problemas relacionados a redirecionamentos indesejados de forma eficaz.

Com este guia, você agora está preparado para lidar com redirecionamentos de URL no Apache com confiança. Boa codificação!