Самодельный редирект URL сокращает конфликт с 301 редиректом

11

У меня есть сайт, который был изначально построен с использованием классического ASP. Около года назад он был переписан на PHP. Это привело к изменению расширений файлов, и некоторые страницы были перемещены в новые места на веб-сайте. Естественно, мы сделали 301 переадресацию со старых URL-адресов на новые URL-адреса, чтобы их пользователи и поисковые системы могли находить свои новые местоположения. Это отлично работает.

Мы также создали для них инструмент, позволяющий владельцу сайта создавать собственные крошечные URL-адреса, которые будут перенаправлять на страницу с переменными отслеживания кампании Google Analytics, включенными в URL-адрес, чтобы они могли отслеживать кампанию и видеть, как она работает.

Проблема, с которой я столкнулся, заключается в том, что правила отслеживания кампаний конфликтуют с редиректами 301 и вообще не позволяют перенаправлениям работать.

Вот код отслеживания кампании:

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

Как вы можете видеть, он проверяет, существует ли файл, и если нет, он перенаправляет на скрипт отслеживания (tracking.php), который затем берет код отслеживания и перенаправляет на правильный URL с кодом кампании Google Analytics в запросе. строка.

Этот код приводит к сбою таких правил:

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

Имеет смысл, что это не работает вместе, как говорят правила отслеживания, «если файл не найден, перенаправьте на tracking.php». Мне нужно, чтобы перенаправления 301 запускались первыми, а если ни один из них не совпадает, то перенаправляют на скрипт отслеживания. Размещение правил отслеживания под перенаправлениями 301 не меняет результаты.

Это можно сделать через .htaccess? Или мне нужно будет изменить скрипт отслеживания, чтобы, если кампания не была найдена, она проверяла, является ли идентификатор кампании действительно старой страницей, которую необходимо перенаправить, и затем выполняет перенаправление 301 оттуда?

Джон Конде
источник

Ответы:

5

Попробуйте преобразовать ваши mod_aliasперенаправления в mod_rewriteдирективы.


Изменить: Пример ниже предполагает, что вы заменили старые ASP-файлы PHP-файлами по тому же пути.

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]

... или вы можете пропустить переменную регулярного выражения и установить явное перенаправление для каждого из старых 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]

Редактирование # 2: Вот пример, который должен охватывать большинство ситуаций, с которыми вы столкнетесь:

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
источник
Я не уверен, что ты имеешь в виду. Можете ли вы привести пример, основанный на том, что я показал в своем вопросе?
Джон Конде
Спасибо за редактирование. Имеет смысл сейчас. Я думаю, что моя последняя проблема будет, что делать с файлами, пути которых изменились? Это возможно? Или я слишком много спрашиваю?
Джон Конде
Вы можете установить явные перенаправления для этих файлов (если большинство путей изменилось, вы также можете использовать явные перенаправления для всех файлов, чтобы обеспечить возможность настройки конфигурации).
danlefree
Я подозреваю, что отсутствие [R=301,L]каждого после перенаправления является причиной моей проблемы. Дайте мне попробовать, и я дам вам знать, что происходит.
Джон Конде
*.asp -> *.phpПодстановочные отлично работает. Отдельные правила для страниц, которые не являются прямым переходом и имеют строки запроса, вызывают проблемы. Но это похоже на правильный путь. Если я не смогу разобраться с этой частью, я начну новый вопрос об этом.
Джон Конде
-1

Я бы изменил перенаправление и оставил бы его, как это было изначально. Перенаправьте ваш новый сайт на ваш старый сайт. Ваш старый сайт, вероятно, уже извлекает выгоду из обратных ссылок, возраста веб-сайта и SEO. Было бы стыдно потерять это, просто заменив его более новым сайтом с более низким рейтингом страницы. Google наказывает перенаправления. На вашем НОВОМ сайте пока не будет SEO, поэтому лучше использовать редирект на него :)

Брайан Маккарти
источник
Я не думаю, что регрессия - это хорошее решение. Оригинальный сайт был плохо сделан почти во всех отношениях. Мы сделали сайт более быстрым, более удобным, доступным, организованным и обслуживаемым. Они ничего не потеряют от перенаправлений, потому что это нишевый сайт, на котором было мало ссылок, и большинство перешло на домашнюю страницу, которая не требует перенаправления. Поэтому мы определенно не хотим возвращаться на старый сайт вообще, потому что ничего не получаем и много теряем.
Джон Конде
К вашему сведению, Google не наказывает за перенаправления. Единственная проблема, с которой сталкиваются перенаправления, - если они слишком глубоко прикованы цепью, они перестают следовать за ними, и при выполнении 301 теряется некоторый PR, но сумма тривиальна и стоит того по сравнению с альтернативами вообще не делать этого.
Джон Конде