Domowe przekierowanie skracacza URL powoduje konflikt z przekierowaniami 301

11

Mam stronę internetową, która została zbudowana przy użyciu klasycznej ASP. Około rok temu został przepisany w PHP. Spowodowało to zmianę rozszerzeń plików i niektóre strony zostały przeniesione do nowych lokalizacji w witrynie. Oczywiście zrobiliśmy 301 przekierowań ze starych adresów URL na nowe adresy URL, aby ich użytkownicy i wyszukiwarki mogli znaleźć nowe lokalizacje. To działa dobrze.

Zbudowaliśmy również narzędzie, które pozwala właścicielowi witryny tworzyć własne małe adresy URL, które przekierowują na stronę ze zmiennymi śledzenia kampanii Google Analytics zawartymi w adresie URL, aby mogli śledzić kampanię i sprawdzać jej skuteczność.

Mam problem z tym, że reguły śledzenia kampanii są w konflikcie z przekierowaniami 301 i w ogóle nie działają.

Oto kod śledzenia kampanii:

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

Jak widać, sprawdza, czy plik istnieje, a jeśli nie, przekierowuje do skryptu śledzenia (tracking.php), który następnie pobiera kod śledzenia i przekierowuje na właściwy adres URL z kodem kampanii Google Analytics w zapytaniu strunowy.

Ten kod powoduje awarię takich reguł:

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

Ma to sens, że nie działa to razem, jak mówią reguły śledzenia: „jeśli plik nie zostanie znaleziony, przekieruj do tracking.php”. Potrzebuję, aby najpierw uruchomiono przekierowania 301, a jeśli żadne z nich nie pasuje, następnie przekieruj do skryptu śledzenia. Umieszczenie reguł śledzenia poniżej przekierowań 301 nie zmienia wyników.

Czy można to zrobić poprzez .htaccess? Czy też będę musiał zmodyfikować skrypt śledzenia, aby jeśli kampania nie została znaleziona, sprawdza, czy identyfikator kampanii jest rzeczywiście starą stroną, którą należy przekierować, a następnie przekierowuje stamtąd 301?

John Conde
źródło

Odpowiedzi:

5

Spróbuj przekształcić mod_aliasprzekierowania w mod_rewritedyrektywy.


Edycja: Przykład poniżej zakłada, że ​​zastąpiłeś stare pliki ASP plikami PHP pod tą samą ścieżką.

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]

... lub możesz pominąć zmienną wyrażenia regularnego i ustawić jawne przekierowanie dla każdego starego identyfikatora 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]

Edycja nr 2: Oto przykład, który powinien obejmować większość sytuacji, które napotkasz:

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
źródło
Nie jestem pewny co masz na myśli. Czy możesz podać przykład oparty na tym, co pokazałem w moim pytaniu?
John Conde
Dzięki za edycję. Ma to teraz sens. Wydaje mi się, że mój ostatni problem dotyczyłby plików, których ścieżki się zmieniły? Czy to jest możliwe? A może pytam za dużo?
John Conde
Możesz ustawić jawne przekierowania dla tych plików (jeśli zmieniła się większość ścieżek, możesz również użyć jawnych przekierowań dla wszystkich plików, aby upewnić się, że konfiguracja jest możliwa do utrzymania).
danlefree
Podejrzewam, że [R=301,L]przyczyną problemu jest brak przekierowania po każdym przekierowaniu. Pozwól, że spróbuję, a dam ci znać, co się stanie.
John Conde
Symbol *.asp -> *.phpwieloznaczny działa świetnie. Indywidualne reguły dla stron, które nie są bezpośrednim przejściem i mają ciągi zapytań, są kłopotliwe. Ale wydaje się, że to właściwa droga. Jeśli nie uda mi się rozwiązać tej części, zacznę nowe pytanie na ten temat.
John Conde
-1

Odwróciłbym przekierowanie i pozostawił je tak, jak było pierwotnie. Przekieruj swoją NOWĄ witrynę do swojej starej witryny. Twoja stara witryna prawdopodobnie już korzysta z linków zwrotnych, wieku witryny i SEO. Szkoda byłoby stracić to, po prostu zastąpić ją nowszą witryną o niższym rankingu strony. Google karze przekierowania. Twoja NOWA witryna nie będzie jeszcze zawierać SEO, więc lepiej użyć przekierowania na tej stronie :)

Brian McCarthy
źródło
Nie sądzę, aby regresowanie było dobrym rozwiązaniem. Oryginalna strona została źle wykonana pod każdym względem. Sprawiliśmy, że strona jest szybsza, bardziej użyteczna, dostępna, zorganizowana i łatwa w utrzymaniu. Nie stracą nic z przekierowań, ponieważ jest to niszowa strona i na początku miała kilka linków, a większość z nich przeszła na stronę główną, która nie wymaga przekierowania. Więc zdecydowanie nie chcemy wracać do starej strony, ponieważ nic nie zyskujemy i dużo tracimy.
John Conde
Do Twojej wiadomości, Google nie karze za przekierowania. Jedynym problemem jest to, że przekierowania są zbyt głębokie, że przestają je podążać, a część PR zostaje utracona podczas robienia 301, ale kwota jest trywialna i warta tego w porównaniu z alternatywami, by tego nie robić.
John Conde