it-swarm.com.de

Die Weiterleitung des hausgemachten URL-Kürzers steht in Konflikt mit 301 Weiterleitungen

Ich habe eine Website, die ursprünglich mit klassischem ASP erstellt wurde. Vor etwa einem Jahr wurde es in PHP umgeschrieben. Dadurch änderten sich die Dateierweiterungen und einige Seiten wurden an neue Speicherorte auf der Website verschoben. Natürlich haben wir 301 Weiterleitungen von den alten URLs zu den neuen URLs durchgeführt, damit Benutzer und Suchmaschinen ihre neuen Standorte finden können. Das funktioniert gut.

Wir haben ihnen auch ein Tool erstellt, mit dem der Websitebesitzer eigene kleine URLs erstellen kann, die zu einer Seite mit den in der URL enthaltenen Google Analytics-Kampagnen-Tracking-Variablen weiterleiten, damit sie die Kampagne verfolgen und ihre Leistung verfolgen können.

Das Problem, das ich habe, ist, dass die Kampagnenverfolgungsregeln mit den 301-Weiterleitungen in Konflikt stehen und die Weiterleitungen überhaupt nicht funktionieren.

Hier ist der Tracking-Code für die Kampagne:

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

Wie Sie sehen können, wird überprüft, ob eine Datei vorhanden ist. Wenn dies nicht der Fall ist, wird sie an ein Tracking-Skript (tracking.php) weitergeleitet, das den Tracking-Code übernimmt und mit dem Google Analytics-Kampagnencode in der Abfrage zur richtigen URL weiterleitet Zeichenfolge.

Dieser Code führt dazu, dass Regeln wie diese fehlschlagen:

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

Es ist sinnvoll, dass dies nicht zusammenarbeitet, da die Tracking-Regeln besagen: "Wenn eine Datei nicht gefunden wird, leiten Sie sie zu tracking.php weiter." Was ich brauche, ist, dass die 301-Weiterleitungen zuerst ausgeführt werden und wenn keine übereinstimmen, dann zum Tracking-Skript weiterleiten. Das Platzieren der Nachverfolgungsregeln unter den 301-Weiterleitungen ändert nichts an den Ergebnissen.

Kann dies über .htaccess erfolgen? Oder muss ich das Tracking-Skript so ändern, dass es überprüft, ob es sich bei der Kampagnen-ID um eine alte Seite handelt, die umgeleitet werden muss, wenn eine Kampagne nicht gefunden wird, und dann die 301-Umleitung von dort ausführen?

11
John Conde

Versuchen Sie, Ihre mod_alias Weiterleitungen in mod_rewrite Anweisungen umzuwandeln.


Edit: Das folgende Beispiel setzt voraus, dass Sie alte ASP Dateien durch PHP Dateien unter demselben Pfad ersetzt haben.

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]

... oder Sie können die Variable für reguläre Ausdrücke überspringen und eine explizite Weiterleitung für jeden der alten URIs festlegen:

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: Hier ist ein Beispiel, das die meisten Situationen abdecken sollte, auf die Sie stoßen werden:

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]
5
danlefree