При переносе сайта с одной системы управления контентом (cms) на другую, в целях сохранения веса определенной страницы (внешние ссылки, page rank, посетители) поисковики рекомендуют использовать redirect 301 (переадресацию) со старого адреса на новый. Наиболее простым и доступным решением на хостинге с веб-сервером Apache является использование файла .htaccess, размещенного в корне сайта.
Если прежний адрес страницы был таким http://site.com/about.html, а новый адрес, например http://new-site.com/about, тогда все просто, в файл .htaccess необходимо добавить следующие строки:

Redirect 301 /about.html http://new-site.com/about

Гораздо интереснее, когда в старом сайте использовались параметры ссылок, например, часто применяемый id. Пример, старый адрес страницы: http://site.com/?id=54

А новый адрес уже с ЧПУ: http://site.com/some-page.html

Чтобы найти решение, не являясь специалистом в настройке серверов, мне потребовалось несколько часов. В итоге, вот, что нужно вставить в файл .htaccess, чтобы получить нужный результат:

Options +FollowSymLinks

RewriteEngine on

RewriteCond %{QUERY_STRING} id=54

RewriteRule ^(.*)$ /some-page.html? [R=301,L]

Убираем index.php из url

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index.php
RewriteRule .* / [R=301,L]

Возможные варианты можно сделать по аналогии, если что — пишите комментарии.

24 комментария

  1. Галина

    Как сделать правильно перенаправление, если используются параметры, например
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^ELEMENT_ID=4383$
    RewriteRule /trained/articles\.php$ /it/informacia? [L,R=301]
    Redirect 301 /trained/articles.php /it/informacia/

    в итоге должен получиться mysait.ru/it/informacia/, а в результате получается mysait.ru/it/informacia/nod/?ELEMENT_ID=4383 он выдирает этот id и прикрепляет его к новой ссылке, как это исправить?

  2. admin

    А изначальный URL какой?
    mysait.ru/trained/articles.php
    ?

    А это откуда? ELEMENT_ID=4383 ?
    Если начальный адрес заканчивается на &ELEMENT_ID=4383. тогда попробуй так:

    Options +FollowSymLinks

    RewriteEngine on

    RewriteCond %{QUERY_STRING} &ELEMENT_ID=4383
    RewriteRule ^(.*)$ /it/informacia/? [R=301,L]

  3. Уррраа! Редирект url с параметрами упорно не получался, пока не увидела эту статью и комментарий.
    Очень круто, спасибо!

  4. Бился с перенаправлением ссылок с параметрами 5 часов, спасибо за решение, использовал последний параметр в ссылке, всё работает! Спасибо!!!

  5. Игорян

    Отличная статья! все работает супер!

  6. Евгений

    Помогите сделать редирект со всех страниц вида site.ru/new.php?id=1…n на страницы типа site.ru/new/123/ уже третий день мучаюсь….

  7. admin

    Вот такой код помогает?

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{QUERY_STRING} id=1
    RewriteRule ^(.*)$ /new/123/? [R=301,L]

  8. Евгений

    ммм он мне сразу после site.ru/11/ выдает id статьи

  9. Евгений

    не совсем не так работает он редиректит все страницы с любым id на страницу site/123/

  10. admin

    А что за CMS? Я проверил, указанный мною код работает на Joomla или просто, впринципе.

    Что у тебя в htaccess написано?

  11. Евгений

    Без CMS сам сайт пишу на php вот хочу ЧПУ сделать .htacces пустой щас

  12. admin

    Дело в том, что в статье привден код не для ЧПУ, а для переадресации с одной страницы на другую. ЧПУ обеспечивает не переадресацию, а замену символов в URL.

  13. Евгений

    ну да вот мне надо сделать так сначала адрес сделать другой и потом переадресовывать
    RewriteEngine On
    RewriteRule ^new/([^/\.]+)/?$ new.php?id=$1 [L]

    вот теперь все нормально страница доступна еще по одному адресу site.ru/new/123/ и site.ru/new.php?id=123

    вот моя проблема как все адреса вот этого вида site.ru/new.php?id=123 переадресовывать на новые

  14. Проблема схожая с той, что у Евгения…

    Нужно сделать редирект со страницы

    /index.php?option=com_content&view=article&id=553

    на

    /news/market/1628/

    Помогите, позязя…

  15. Борис

    Подскажите пожалуйста как сделать редирект со всех страниц типа

    site.com/111.php?a=1&b=3…
    на:
    site.com/222.php?a=1&b=3…
    с теми же параметрами

  16. Сергей

    Большое спасибо, статья спасла!

  17. Не понятным остается одно: как передать значение параметра в URL.

    например
    …?lang=ru
    …./ru/

    …?lang=en
    …./en/

  18. Денис

    Добрый день! Вопрос крайне тупой — как сделать редирект с передачей параметра.

    Redirect 301 / http://site.com?s=1/

    s=1 не передается

    Т.е. редирект со старого домена на новый сайт с передачей параметра s=1 (для отслеживания обращений по старому домену)

    Спасибище !!!

  19. Спасибо! Помогло, правда сначала писал ошибку о цикличности переадресации. Потом все настроил.

  20. Виталик

    Добрый день. У меня сайт на Вордпрессе.

    Были ссылки такого типа: /%postname%/

    Изменил на /%postname%-%post_id%.html

    Подскажите, пожалуйста, как прописать правило для редиректа?

    Спасибо.

  21. Irina Pironova

    Здравствуйте! С точки зрения SEO, следует всегда использовать 301 редирект , в случае, если вы хотите перенаправлять и пользователей и поисковых роботов на новый адрес.

  22. Сергей

    Здравствуйте
    есть проблема не могу сам решить
    есть много адресов типа
    /shop/category/77/virobi-z-dereva/virobi-z-dereva.html
    слово /category/ на новом сайте не используется в урл
    как массово сделать 301 редирект со всех входящих страниц из поиска с этой вставкой на существующий адрес без этой вставки?
    одним словом как убрать корректно вставку /category/?

Write A Comment