Домашнє перенаправлення коротших 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

Це має сенс, що це не працює разом, як кажуть правила відстеження, "якщо файл не знайдено, перенаправлення на track.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

Я підозрюю, що не виникає [R=301,L]після кожного перенаправлення, що викликає мою проблему. Дозвольте мені спробувати це, і я дам вам знати, що відбувається.
Джон Конде

*.asp -> *.phpСимволи відмінно працює. Індивідуальні правила для сторінок, які не є прямим переходом та мають рядки запитів, викликають клопіт. Але це здається правильним шляхом. Якщо я не можу розібрати цю частину, я розпочну нове запитання про неї.
Джон Конде

-1

Я би перевернув переспрямування і залишив його таким, яким він був спочатку. Перенаправляйте свій НОВИЙ сайт на свій СТАРИЙ Ваш СТАРИЙ веб-сайт, ймовірно, вже виграє від зворотних посилань, віку веб-сайту та SEO. Соромно було б втратити, що просто замінити його на новіший сайт із нижчим рейтингом сторінки. Google карає переадресації. На вашому НОВОМУ веб-сайті поки що немає SEO, тому краще скористатися переспрямуванням на цей :)


Я не думаю, що регрес - це гарне рішення. Оригінальний сайт був погано зроблений практично всіляко. Ми зробили сайт швидшим, більш зручним, доступним, організованим та доступним для обслуговування. Вони не втратять нічого від переадресації, тому що це нішевий сайт і мали кілька посилань для початку, а більшість перейшли на головну сторінку, яка не потребує переадресації. Тож ми точно не хочемо взагалі повертатися на старий сайт, оскільки нічого не отримуємо і багато втрачаємо.
Джон Конде

FYI, Google не карає за переадресацію. Єдине питання переадресації - це якщо вони занадто глибоко приковані, вони перестають слідувати за ними, і деякі PR втрачаються, коли роблять 301, але сума є тривіальною і варто її порівняно з альтернативами цього взагалі не робити.
Джон Конде
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.