Às vezes queremos redirecionar antigos endereços para novos. Por exemplo, a antiga Página do Eitch tinha todas as suas URLs dentro do subdiretório /eitch/_pagina_, e agora está tudo na raiz. Como eu poderia fazer com que todos os links antigos continuassem a funcionar, agora com a nova URL? No Apache, podemos utilizar o mod_rewrite para fazer isso.
Para ilustrar essa dica, vamos supor que tínhamos o endereço:
- http://www.minha-empresa-radical.com.br
E de repente mudei o nome da empresa e com isso o domínio, para:
- http://www.radical-enterprises.com
Ao invés de manter as páginas em duas URLs, por que não deixar somente na última? Para fazer isto, você precisará manter os dois domínios separados por configurações de domínios virtuais.
No domínio virtual www.minha-empresa-radical.com.br, deixe o diretório das páginas vazio, enquanto que no domínio virtual www.radical-enterprises.com, deixe todas as páginas normalmente.
Agora vem o truque do mod_rewrite. Dentro do domínio virtual www.minha-empresa-radical.com.br (que está vazio), crie um arquivo .htaccess com o seguinte conteúdo:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://www.radical-enterprises.com/$1 [R]
Aviso: Lembre-se que o .htaccess tem que estar liberado para uso no Apache. Para saber mais sobre o htaccess, consulte este tutorial.
Estas linhas fazem com que qualquer arquivo que seja requisitado no domínio virtual www.minha-empresa-radical.com.br seja automaticamente redirecionado para o outro domínio. Exemplos:
Usuário acessa: http://www.minha-empresa-radical.com.br
Cai em: http://www.radical-enterprises.com.br
Usuário acessa: http://www.minha-empresa-radical.com.br/conteudo/noticia-legal
Cai em: http://www.radical-enterprises.com.br/conteudo/noticia-legal
Ou seja, os caminhos das URLs também são “traduzidos” automaticamente.
Nota: As duas linhas de “RewriteCond” do .htaccess fazem com que este redirecionamento só ocorra quando não houver nenhum arquivo ou diretório existente com o nome da URL. Como o domínio virtual está vazio, as URLs sempre vão ser redirecionadas.
Como eu disse anteriormente, tive que redirecionar todo o conteúdo do diretório /eitch para a raiz. Neste caso, utilizei um .htaccess como este:
RewriteEngine on RewriteCond %{REQUEST_URI} ^/eitch/(.*) RewriteRule ^(.*)$ /$1 [R]
Neste caso, ele redireciona apenas todo o conteúdo do diretório /eitch para a raiz. Exemplos:
Usuário acessa: https://www.devin.com.br/eitch/vcd/
Cai em: https://www.devin.com.br/eitch/vcd/
Usuário acessa: https://www.devin.com.br/eitch/htaccess/
Cai em: https://www.devin.com.br/eitch/htaccess/
Usuário acessa: https://www.devin.com.br/outros/artigo/
Cai em: https://www.devin.com.br/outros/artigo/
(Não entra no redirecionamento)
Bom proveito!