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?