Redirection de raccourcisseur d'URL maison en conflit avec les redirections 301


11

J'ai un site Web qui a été initialement construit en utilisant ASP classique. Il y a environ un an, il a été réécrit en PHP. Cela a entraîné la modification des extensions de fichier et certaines pages ont été déplacées vers de nouveaux emplacements dans le site Web. Naturellement, nous avons effectué 301 redirections des anciennes URL vers les nouvelles URL afin que leurs utilisateurs et moteurs de recherche puissent trouver leurs nouveaux emplacements. Cela fonctionne bien.

Nous leur avons également créé un outil qui permet au propriétaire du site de créer ses propres URL minuscules qui seront redirigées vers une page avec des variables de suivi de campagne Google Analytics incluses dans l'URL afin qu'il puisse suivre la campagne et voir comment elle fonctionne.

Le problème que j'ai est que les règles de suivi des campagnes sont en conflit avec les redirections 301 et empêchent les redirections de fonctionner du tout.

Voici le code de suivi de la campagne:

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

Comme vous pouvez le voir, il vérifie si un fichier existe et s'il ne le fait pas, il redirige vers un script de suivi (tracking.php) qui prend ensuite le code de suivi et redirige vers l'URL appropriée avec le code de campagne Google Analytics dans la requête chaîne.

Ce code provoque l'échec de règles comme celle-ci:

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

Il est logique que cela ne fonctionne pas ensemble comme le disent les règles de suivi, "si un fichier n'est pas redirigé vers tracking.php". Ce dont j'ai besoin, c'est que les redirections 301 s'exécutent en premier, et si aucune ne correspond, puis redirigez vers le script de suivi. Placer les règles de suivi sous les redirections 301 ne change pas les résultats.

Peut-on le faire via .htaccess? Ou devrais-je modifier le script de suivi afin que si une campagne n'est pas trouvée, il vérifie si l'ID de la campagne est en fait une ancienne page qui doit être redirigée, puis effectue la redirection 301 à partir de là?

Réponses:


5

Essayez de convertir vos mod_aliasredirections en mod_rewritedirectives.


Modifier: l' exemple ci-dessous suppose que vous avez remplacé les anciens fichiers ASP par des fichiers PHP sous le même chemin.

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 vous pouvez ignorer la variable d'expression régulière et définir une redirection explicite pour chacun des anciens URI:

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: Voici un exemple qui devrait couvrir la plupart des situations que vous rencontrerez:

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]

Je ne sais pas ce que tu veux dire. Pouvez-vous donner un exemple basé sur ce que j'ai montré dans ma question?
John Conde

Merci pour l'édition. Ça a du sens maintenant. Je suppose que mon dernier problème serait de savoir quoi faire avec les fichiers dont les chemins ont changé? Est-ce possible? Ou est-ce que j'en demande trop?
John Conde

Vous pouvez définir des redirections explicites pour ces fichiers (si la plupart des chemins ont changé, vous pouvez également utiliser des redirections explicites pour tous les fichiers pour vous assurer que la configuration est maintenable).
danlefree

Je soupçonne que le fait de ne pas avoir la [R=301,L]suite de chaque redirection est à l'origine de mon problème. Laissez-moi essayer et je vous ferai savoir ce qui se passe.
John Conde

Le *.asp -> *.phpcaractère générique fonctionne très bien. Les règles individuelles pour les pages qui ne sont pas une transition directe et qui ont des chaînes de requête sont problématiques. Mais cela semble être la bonne façon de procéder. Si je ne parviens pas à régler cette partie, je vais commencer une nouvelle question à ce sujet.
John Conde

-1

Je voudrais inverser la redirection et la laisser telle qu'elle était à l'origine. Redirigez votre nouveau site vers votre ancien site. Votre ancien site bénéficie probablement déjà de back -links, de l'âge du site Web et du référencement. Il serait dommage de perdre cela juste pour le remplacer par un site plus récent avec un rang de page inférieur. Google punit les redirections. Votre NOUVEAU site n'aura pas encore de référencement dessus, il est donc préférable d'utiliser une redirection sur celui-ci :)


Je ne pense pas que la régression soit une bonne solution. Le site d'origine a été mal fait dans presque tous les sens. Nous avons rendu le site plus rapide, plus utilisable, accessible, organisé et maintenable. Ils ne perdront rien des redirections car c'est un site de niche et avait peu de liens pour commencer et la plupart sont allés à la page d'accueil qui ne nécessite pas de redirection. Nous ne voulons donc pas du tout revenir sur l'ancien site car nous ne gagnons rien et perdons beaucoup.
John Conde

Pour info, Google ne punit pas les redirections. Le seul problème des redirections est que si elles sont enchaînées trop profondément, elles cessent de les suivre et certains PR sont perdus lors de la réalisation d'un 301, mais le montant est trivial et en vaut la peine par rapport aux alternatives de ne pas le faire du tout.
John Conde
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.