Você já teve que mudar uma página ou site de lugar para descobrir que seu site voltou a estaca zero?
É normal que, por um motivo ou outro, seja necessário mudar a localização de algumas páginas, ou mesmo sites inteiros.
Porém o árduo trabalho que teve para posicionar seu site, conseguir links e tantas outras coisas, pode ser perdido, se você não informar aos mecanismos de buscas e principalmente os navegadores que sua página mudou de lugar.
Ontem, ao escrever o artigo sobre a afirmação do Cardoso quanto ao artigo da Cicarelli, cometi um deslize e digitei o nome dela com um l a menos, o que poderia me trazer alguns problemas, já que o Google, por exemplo, já possui correção ortográfica na busca, por padrão.
Quando reparei o erro, a página já estava indexada, já estava no RSS e já tinha um trackback no blog do Cardoso.
Outra situação, mês passado, alterei os links para as categorias, pois estava /arquivo/category/nome_da_categoria/ e eu não gostava desta forma, queria colocar somente /categoria/nome_da_categoria/.
Mais um item, os plugins que apresenta a versão de impressão e envia os artigos por e-mail, acrescentavam apenas print/ e email/, o que seria ótimo se eu utilizasse o link permanente padrão que termina o nome do artigo com um "/", porém minha estrutura de links termina o nome do arquivo com .html, ficou bastante esquisito.
Finalmente (na verdade este foi o primeiro que resolvi ;)), tinha meus assinantes do RSS divididos entre o feed padrão do Wordpress e o FeedBurner.
Ao acertar os itens acima eu perderia centenas de páginas indexadas, outros tantos links e backlinks espalhados por ai, o PR de todas as páginas e mais um monte de coisas que nem quero imaginar.
Se você está em uma situação como esta, seu problema pode ser muito mais simples de resolver do que você imagina.
O único pré-requisito para resolver este problema é estar em um servidor que utilize o Apache, com mod_rewrite ativado e você tenha acesso ao .htaccess.
Se você não entendeu nada do parágrafo anterior, pergunte ao suporte de sua hospedagem que eles podem responder (se não souberem responder, está na hora de mudar de hospedagem).
Vou separar a resposta por partes, para que fique mais fácil de entender.
Existem várias soluções para os problemas apresentados, vou mostrar os mais simples de implementar, na minha opinião.
Atenção: erros no .htaccess podem fazer com que seu site pare de funcionar e, em alguns casos, colocar o servidor em loop eterno (se o servidor não foi bem configurado), não me responsabilizo se algo der errado.
Recomendações:
Ler os seguintes artigos, se não domina o mod_rewrite:
Problema 1 – Mudança no link de uma página
Este é o problema mais simples de se resolver, basta gerar um redirecionamento permanente do endereço errado para o correto.
RewriteRule ^arquivo/2006/09/20/links-para-o-video-da-daniela-cicareli.html$ /arquivo/2006/09/20/links-para-o-video-da-daniela-cicarelli.html [R=301,L]
Pedi para que sempre que fosse encontrado o endereço http://www.brpoint.net/arquivo/2006/09/20/links-para-o-video-da-daniela-cicareli.html, um redirecionamento permanente (301) o agente fosse enviado para o agente, apontando para http://www.brpoint.net/arquivo/2006/09/20/links-para-o-video-da-daniela-cicarelli.html.
Note o "L" no final da regra, que informa ao mod_rewrite que o processamento deve ser encerrado, assim ele não continuará aplicando as demais regras, o que poderia causar problemas para o Wordpress.
Problema 2 – Mudança dos links para as categorias
O problema aqui é um pouco mais complicado, pois são várias categorias que seriam afetadas.
Mas a solução, em si, é simples.
Ao invés de criar uma regra para cada categoria, posso usar uma expressão regular para pegar só a parte que quero que seja alterada.
RewriteRule ^arquivo/category/?(.*)$ /categoria/$1 [R=301,L]
O caractere "^" indica onde deve começar a pesquisa e o "$" onde deve terminar, toda esta parte, entre os dois, será modificado pela regra.
O "?(.*)" cria uma "variável" que pode conter nenhum ou qualquer quantidade de qualquer caractere e são repassados para o resultado pelo "$1", pois é o primeiro a ocorrer.
Problema 3 – Endereços estranhos gerados pelo plugin
Os dois plugins geravam endereços do tipo "arquivo.htmlprint/" e "arquivo.htmlemail/".
Solução muito parecida com o exemplo anterior:
RewriteRule ^(.*)\.htmlprint/?(.*)$ $1.html/print/$2 [R=301,L]
RewriteRule ^(.*)\.htmlemail/?(.*)$ $1.html/email/$2 [R=301,L]
Veja que a única diferença para o anterior é que agora temos duas "variáveis", na primeira vez que ela ocorre, será identificada como $1 e na segunda como $2 (e continuaria assim sucessivamente).
Problema 4 – Concentrar os assinantes no FeedBurner
Esta solução, na verdade me ajudou em duas coisas, concentrar os usuários, que era o objetivo inicial, e só precisar apresentar o endereço do feed gerado Wordpress, assim, se amanhã eu quiser deixar de usar o FeedBurner, basta modificar o redirecionamento, novamente.
Esse problema é um pouco mais complicado que os demais, pois preciso identificar se é um navegador ou o FeedBurner que está acessando para direcionar cada um para o lugar certo e o Wordpress gera vários endereços diferentes.
Na verdade, possuo 3 regras para os feeds, pois tenho 3 feeds diferentes que são exibidos pelo Feedburner, mas só vou colocar aqui o mais comum que se aplica a todos.
RewriteCond %{HTTP_USER_AGENT} FeedBurner
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ /wp-feed.php?feed=$1 [QSA]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/BrunoAlves [R,L]
Uso o RewriteConde para indentificar a condição para aplicar a próxima regra, no caso, verifico o User Agent para saber se é o FeedBurner ou não.
Se for o FeedBurner redireciono para o arquivo do Wordpress que gera o feed (utilizo os parâmetros "QSA", no final da regra para que as QueryStrings sejam passadas, também).
A expressão regular, simplesmente diz que pode conter qualquer coisa de a até z, de 0 até 9, a mistura dos dois ou nenhum caractere.
Considerações Finais
Melhores ofertas de: Servidores, Blog, Linux, Livros, Manuais
[bbl]servidores,mod_rewrite,url,redirecionamento,FeedBurner,tutoriais,Linux,Apache[/bbl]
RSS feed para os comentários deste artigo. URLpara trackback
22/setembro/2006 at 20:41
Bruno, achei um pequeno erro:
“A expressão regular, simplesmente diz que pode conter qualquer coisa de a até z, de 0 até 9, a mistura dos dois ou nenhum caractere.”
Na verdade, ele nao pode conter nenhum caractere. O + diz “um ou mais” pelo que eu sei hehe
Abraços
22/setembro/2006 at 21:02
Mas as interrogações dizem que pode ou não conter o grupo que está entre ().
Ou você tem um grupo formado pelos caracteres dentro do intervalo ou não tem nada.
Por exemplo:
/feed/rss2/ - estaria correto
/feed/rss2 - estaria correto
/feed/RSS2/ - estaria incorreto
Por isso que falei que esse era um pouco mais enrolado ;).
Abraço
22/setembro/2006 at 21:02
Muito bom cara!
Se eu quiser trocar de domÃnio também posso usar o mod_rewrite né? Imagino que seja um pouco trabalhoso mas com meu Apache configurado para os dois domÃnios eu posso criar as regras para mandar tudo que chegar pro antigo para o novo. A quantidade de regras aumenta bastante. Será que vale a pena?
No final do ano vou trocar de serviço de hospedagem, provavelmente vou pegar um outro domÃnio e não queria perder todos os links. Não sei se o esforço é valido.
22/setembro/2006 at 21:07
Se você tiver acesso ao mod_rewrite no domÃnio antigo, sim, nem é são complicado de fazer.
Basta que crie um padrão de mudança e coloque a expressão regular no mesmo.
RewriteRule ^(.*)$ http://www.novodominio.com/1 [L,R=302]No caso de mudança de domÃnio, prefiro usar o 302.
Abraço
23/setembro/2006 at 10:36
No problema 4, dá para facilitar (muito) as coisas com o plugin FeedBurner Feed Replacement. Uso no WinAjuda, e funciona muito bem!
[]’s
23/setembro/2006 at 12:36
Eu testei o plugin, mas devido a algumas configurações especÃficas do meu servidor ou conflito com outros plugins ele não funcionou.
Tive que fazer na mão :).
Mas é uma boa dica para quem não tem acesso ou não quer editar o .htaccess.
Abraço
02/outubro/2006 at 14:45
O .htaccess deve ficar no document root do httpd.conf ?
acho que não consegui fazer funcionar
O endereço do meu rss é
http://www.arcanjo.org/blog/?feed=rss2
o feedburner é
http://feeds.feedburner.com/arcanjo
e o .htaccess que eu coloquei dentro de /var/www/arcanjo.org/blog é :
RewriteCond %{HTTP_USER_AGENT} FeedBurner
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ /wp-feed.php?feed=$1 [QSA]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/arcanjo [R,L]
Teria condições de me ajudar ?
05/outubro/2006 at 9:20
Rafael,
algumas perguntas:
RewriteEngine OnAbraço
05/outubro/2006 at 9:58
Bruno,
1) Sim, eu tenho acesso.
2) Não, não tinha colocado.
Tinha entendido que esta parte estaria no httpd.conf.
Agora está assim:
# cat .htaccessRewriteEngine On
RewriteCond %{HTTP_USER_AGENT} FeedBurner
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ /wp-feed.php?feed=$1 [QSA]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/arcanjo [R,L]
Pelo que vi aqui ainda não esta funcionando.
Não sei se tem algo a ver, mas quando o Feedburner acessa o meu site, no access.log fica gravado da seguinte forma:
“FeedBurner/1.0 (http://www.FeedBurner.com)”
Tentei também incluir o “/1.0″ no código do .htaccess e ainda assim não tive muito sucesso.
No meu modules.conf está assim:
LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.soObrigado pela boa vontade.
05/outubro/2006 at 10:30
Estranho,
está correta a regra.
Tente ativar os permalinks do wordpress para ver se funciona.
Pela regra quando você acessar /feed/, deveria ser redirecionado para o Feedburner.
Quanto ao Agent, não tem problema, pode deixar só a primeira parte do nome.
Por favor, verifique como está setada a opção AllowOverride no httpd.conf.
Abraço
05/outubro/2006 at 11:10
Bruno,
Acho que entendi errado então, porque quando o cara clicar no meu feed (que é http://www.arcanjo.org/blog/?feed=rss2) ele deveria ser redirecionado ao feedburner, e não quando clicar em /feed/.
Talvez tenha entendido mal a regra.
A opção AllowOveride está setada para “none”.
Tentei mudar o permalinks, mas continuou indo diretamente para o arquivo de xml puro.
Infelizmente não consigo ver os links do site, porque acesso via proxy (calculatepie).
Estou primeiramente tentando mudar o Rss para depois mudar todos os posts, pois vou mudar a opção de permalinks para melhor aproveitamento de SEO.
05/outubro/2006 at 11:20
http://www.arcanjo.org/blog/?feed=rss2, você está acessando diretamente um arquivo existente (o index.php), o que tem procedência sobre o .htaccess.
Com AllowOverride setado para none desabilita o .htaccess.
Mude para All para que possa usar todos os recursos do .htaccess.
Abraço
29/outubro/2006 at 9:53
[...] PS: O padrão das URLS mudou, há uma configuração no novo servidor que ainda não consegui resolver para voltar ao padrão antigo. Caso isso não se resolva (em breve) vou contornar o problema dos apontadores antigos com esta dica do Bruno Alves. [...]
23/novembro/2006 at 16:45
[...] Na verdade, o Plugin poderia ser substituÃdo por uma seqüência de regras para o mod_rewrite. [...]
05/dezembro/2006 at 15:19
[...] Mas a idéia de gerar centenas de linhas de regras do mod_rewrite no .htaccess, me dava calafrios. [...]
11/junho/2007 at 22:25
[...] maneira mais simples de fazer isso é utilizando o mod_rewrite para reescrever as URLs passando os novos [...]
21/junho/2007 at 12:00
Fala bruno, ta bom cara? Eu sabia que o mod_rewrite existia mas nao sabia que ele era magico assim =) vlw pela dica.
Forte abraço
21/junho/2007 at 12:37
Fill, o mod_rewrite, faz isso e muito mais, é uma ferramenta muito poderosa.
Abraço
21/agosto/2007 at 23:08
Bruno, como você fez com seu .htaccess para ter esses redirecionamentos legais do JaCotei? E como ficou o robots.txt? Obrigado!
22/agosto/2007 at 6:45
Daniel, vou escrever um artigo sobre isso.
Abraço
16/abril/2008 at 12:37
Estes redirecionamentos mantem o page rank da pagina?