Redirecionador caseiro de encurtador de URL em conflito com redirecionamentos 301

11

Eu tenho um site que foi originalmente construído usando ASP clássico. Cerca de um ano atrás, ele foi reescrito em PHP. Isso causou alterações nas extensões de arquivo e algumas páginas foram movidas para novos locais no site. Naturalmente, fizemos 301 redirecionamentos dos URLs antigos para os novos, para que seus usuários e mecanismos de pesquisa pudessem encontrar seus novos locais. Isso funciona bem.

Também criamos para eles uma ferramenta que permite ao proprietário do site criar seus próprios URLs minúsculos que serão redirecionados para uma página com as variáveis ​​de rastreamento de campanha do Google Analytics incluídas no URL, para que possam acompanhar a campanha e ver seu desempenho.

O problema que tenho é que as regras de rastreamento de campanha entram em conflito com os redirecionamentos 301 e impedem que os redirecionamentos funcionem.

Aqui está o código de acompanhamento da campanha:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

Como você pode ver, ele verifica se existe um arquivo e, caso não exista, ele é redirecionado para um script de rastreamento (tracking.php) que pega o código de rastreamento e o redireciona para o URL apropriado com o código de campanha do Google Analytics na consulta corda.

Esse código faz com que regras como esta falhem:

redirect 301 /about.asp /about.php
redirect 301 /capabilities.asp /capabilities.php
redirect 301 /capacitors.asp /capacitors.php

Faz sentido que isso não funcione em conjunto, como dizem as regras de rastreamento, "se um arquivo não for encontrado, redirecione para tracking.php". O que eu preciso é que os redirecionamentos 301 sejam executados primeiro e, se nenhum deles corresponder, redirecione para o script de rastreamento. A colocação das regras de rastreamento abaixo dos redirecionamentos 301 não altera os resultados.

Isso pode ser feito via .htaccess? Ou precisarei modificar o script de rastreamento para que, se uma campanha não for encontrada, verifique se o ID da campanha é realmente uma página antiga que precisa ser redirecionada e faça o redirecionamento 301 a partir daí?

John Conde
fonte

Respostas:

5

Tente converter seus mod_aliasredirecionamentos em mod_rewritediretivas.


Editar: O exemplo abaixo pressupõe que você substituiu arquivos ASP antigos por arquivos PHP no mesmo caminho.

RewriteEngine on

# *.asp -> *.php
RewriteRule (.*)\.asp$ /$1.php [R=301,L]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]

... ou você pode pular a variável de expressão regular e definir um redirecionamento explícito para cada um dos URIs antigos:

RewriteRule about\.asp$ /about.php [R=301,L]
RewriteRule capabilities\.asp$ /capabilities.php [R=301,L]
RewriteRule capacitors\.asp$ /capacitors.php [R=301,L]

Edit # 2: Aqui está um exemplo que deve cobrir a maioria das situações que você encontrará:

RewriteEngine on

# Changes to path + Query String Append
RewriteRule ^/path/to/old\.asp$ /path/to/new/about.php [R=301,L,QSA]

# *.asp -> *.php + Query String Append
RewriteRule ^(.*)\.asp$ $1.php [R=301,L,QSA]

# tracking script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /tracking.php?$1 [R=301,L]
danlefree
fonte
Não sei bem o que você quer dizer. Você pode dar um exemplo com base no que mostrei na minha pergunta?
John Conde
Obrigado pela edição. Faz sentido agora. Acho que meu último problema seria o que fazer com os arquivos cujos caminhos foram alterados? Isso é possível? Ou estou pedindo demais?
John Conde
Você pode definir redirecionamentos explícitos para esses arquivos (se a maioria dos caminhos tiver sido alterada, você também poderá usar redirecionamentos explícitos para todos os arquivos para garantir que a configuração seja mantida).
31511 danlefree
Eu suspeito que não ter o [R=301,L]após cada redirecionamento é o que está causando o meu problema. Deixe-me tentar e informarei o que acontece.
John Conde
O *.asp -> *.phpcuringa funciona muito bem. As regras individuais para as páginas que não são uma transição direta e têm sequências de consulta estão sendo problemáticas. Mas este parece ser o caminho certo a seguir. Se eu não conseguir resolver essa parte, vou começar uma nova pergunta.
John Conde
-1

Gostaria de reverter o redirecionamento e deixá-lo como era originalmente. Redirecione seu site NOVO para o site ANTIGO. Provavelmente, seu site antigo já está se beneficiando de links de retorno, idade do site e SEO. Seria uma pena perder isso apenas para substituí-lo por um site mais recente com um page rank menor. O Google pune redirecionamentos. Seu NOVO site ainda não possui SEO, portanto é melhor usar um redirecionamento nesse site :)

Brian McCarthy
fonte
Não acho que regressar seja uma boa solução. O site original foi mal executado em quase todos os aspectos. Tornamos o site mais rápido, mais utilizável, acessível, organizado e sustentável. Eles não perderão nada com os redirecionamentos, porque é um site de nicho e tinham poucos links, e a maioria foi para a página inicial, que não requer redirecionamento. Portanto, definitivamente não queremos voltar ao site antigo, pois não ganhamos nada e perdemos muito.
John Conde
Para sua informação, o Google não pune redirecionamentos. O único problema que os redirecionamentos têm é que, se estiverem encadeados demais, eles param de segui-los e algum PR é perdido ao fazer um 301, mas a quantia é trivial e vale a pena em comparação com as alternativas de não fazer nada.
John Conde