Publicidade 

Mudando URLs

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:

  1. Comprehensive guide to .htaccess
  2. Expressões Regulares

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

  • Por ser um arquivo de configuração, convém ter cuidado com a edição do .htaccess.
  • Esquemas parecidos podem ser feitos com o PHP, mas o mod_rewrite apresenta um rendimento muito melhor, não gostei quando o WP mudou seus redirecionamentos para o PHP.
  • Sempre que for criar um redirecionamento, procure por um padrão, para que possa usar expressões regulares, isto diminui bastante o tamanho do .htaccess, melhorando o desempenho.
  • Existem várias discussões se é melhor (para SEO) utilizar o redirecionamento permanente (301) ou o temporário (302). Para erros, prefiro usar o 301, para mudanças, prefiro o 302. Mas isso é assunto para outro artigo.

Compare Preços de: Servidores, Blog, Linux, Livros, Manuais

[tags]servidores,mod_rewrite,url,redirecionamento,FeedBurner,tutoriais,Linux,Apache[/tags]
[bbl]servidores,mod_rewrite,url,redirecionamento,FeedBurner,tutoriais,Linux,Apache[/bbl]

Compartilhe e Guarde: Esses links facilitam a inclusão deste artigo nas redes sociais. Compartilhe.
  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Technorati
  • Simpy
  • del.icio.us
  • Blue Dot

Artigos relacionados







21 Comentários »

Comentário por LucasMS Recebendo notificações por e-mail
2006-09-22 20:41:10

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

 
Comentário por Bruno Alves
2006-09-22 21:02:27

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

 
Comentário por Vinícius de Figueire
2006-09-22 21:02:35

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.

 
Comentário por Bruno Alves
2006-09-22 21:07:16

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

 
Comentário por Rodrigo P. Ghedin
2006-09-23 10:36:59

No problema 4, dá para facilitar (muito) as coisas com o plugin FeedBurner Feed Replacement. Uso no WinAjuda, e funciona muito bem!

[]'s

 
Comentário por Bruno Alves
2006-09-23 12:36:15

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

 
Comentário por Rafael Arcanjo Recebendo notificações por e-mail
2006-10-02 14:45:26

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 ?

 
Comentário por Bruno Alves
2006-10-05 09:20:58

Rafael,

algumas perguntas:

  1. Você tem acesso ao mod_rewrite em seu servidor?
  2. Você colocou o código abaixo no início do .htaccess?

RewriteEngine On

Abraço

 
Comentário por Rafael Arcanjo Recebendo notificações por e-mail
2006-10-05 09:58:43

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 .htaccess

RewriteEngine 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.so

Obrigado pela boa vontade.

 
Comentário por Bruno Alves
2006-10-05 10:30:54

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

 
Comentário por Rafael Arcanjo Recebendo notificações por e-mail
2006-10-05 11:10:12

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.

 
Comentário por Bruno Alves
2006-10-05 11:20:35

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

 
2006-10-29 09:53:12

[...] 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. [...]

 
2006-11-23 16:45:43

[...] Na verdade, o Plugin poderia ser substituído por uma seqüência de regras para o mod_rewrite. [...]

 
2006-12-05 15:19:13

[...] Mas a idéia de gerar centenas de linhas de regras do mod_rewrite no .htaccess, me dava calafrios. [...]

 
2007-06-11 22:25:20

[...] maneira mais simples de fazer isso é utilizando o mod_rewrite para reescrever as URLs passando os novos [...]

 
Comentário por Fill
2007-06-21 12:00:12

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

 
Comentário por Bruno Alves
2007-06-21 12:37:00

Fill, o mod_rewrite, faz isso e muito mais, é uma ferramenta muito poderosa.

Abraço

 
Comentário por Daniel Ribeiro Recebendo notificações por e-mail
2007-08-21 23:08:05

Bruno, como você fez com seu .htaccess para ter esses redirecionamentos legais do JaCotei? E como ficou o robots.txt? Obrigado!

 
Comentário por Bruno Alves
2007-08-22 06:45:33

Daniel, vou escrever um artigo sobre isso.

Abraço

 
Comentário por Leandro Feijó
2008-04-16 12:37:21

Estes redirecionamentos mantem o page rank da pagina?

 
Nome
Email
Site
Seu Comentário (menor | maior)
Você pode usar: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> e [CODE] [/CODE] em seu comentário.