Apache: Redirecionando domínios antigos para novos
À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: http://www.devin.com.br/eitch/vcd/
Cai em: http://www.devin.com.br/eitch/vcd/
Usuário acessa: http://www.devin.com.br/eitch/htaccess/
Cai em: http://www.devin.com.br/eitch/htaccess/
Usuário acessa: http://www.devin.com.br/outros/artigo/
Cai em: http://www.devin.com.br/outros/artigo/
(Não entra no redirecionamento)
Bom proveito!
Gostou?
Imprimir esta página
Leia também:
- Apache: Eu tenho muitos domínios virtuais, como posso fazer para gerar logs separados de cada um?
- Apache: Mostrando páginas de um servidor Intranet num servidor Internet
- Novos Tutoriais
- Apache: Como posso bloquear outros sites de fazer links diretos em meus arquivos?
- Tutorial Apache: htaccess






03 de mar de 2009 em 7:27 pm
Cara, procurei muuuuito sobre isso, é so consegui enterder graças a essa explicação. =D
Valew mesmo cara, tudo de bom Aê. ^.^
26 de abr de 2009 em 2:06 pm
Muito bom Hugo, esse artigo me ajudo muito para trabalhar com Urls amigáveis no php, abraço.