Mudando URLs | BrPoint
Quem é você? Participe da pesquisa sobre os leitores do BrPoint
Powered by MaxBlogPress 

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.

Melhores ofertas de:  Servidores, Blog, Linux, Livros, Manuais

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

Compartilhe e Guarde:
  • Rec6
  • StumbleUpon
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Technorati
  • del.icio.us
  • Blue Dot
  • imera



Artigos Relacionados

21 Comentários »

  1. avatar comment-top

    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

    comment-bottom
  2. avatar comment-top

    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

    comment-bottom
  3. avatar comment-top

    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.

    comment-bottom
  4. avatar comment-top

    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

    comment-bottom
  5. avatar comment-top

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

    []’s

    comment-bottom
  6. avatar comment-top

    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

    comment-bottom
  7. avatar comment-top

    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 ?

    comment-bottom
  8. avatar comment-top

    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

    comment-bottom
  9. avatar comment-top

    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.

    comment-bottom
  10. avatar comment-top

    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

    comment-bottom
  11. avatar comment-top

    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.

    comment-bottom
  12. avatar comment-top

    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

    comment-bottom
  13. avatar comment-top

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

    comment-bottom
  14. avatar comment-top

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

    comment-bottom
  15. avatar comment-top

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

    comment-bottom
  16. avatar comment-top

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

    comment-bottom
  17. avatar comment-top

    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

    comment-bottom
  18. avatar comment-top

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

    Abraço

    comment-bottom
  19. avatar comment-top

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

    comment-bottom
  20. avatar comment-top

    Daniel, vou escrever um artigo sobre isso.

    Abraço

    comment-bottom
  21. avatar
    Leandro Feijó Says:
    16/abril/2008 at 12:37
    comment-top

    Estes redirecionamentos mantem o page rank da pagina?

    comment-bottom

RSS feed para os comentários deste artigo. URLpara trackback

Deixe seu comentário

XHTML: Você pode usar as tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>