Обычный редирект в магазинах на Opencart CMS не срабатывает и выдает ошибку Internal Server Error (500). Решается эта задача с помощью другого синтаксиса Redirect 301.
Содержание
Изменились ссылки на статьи, о магазине, товары и категории.
А я согласился, совсем забыв, что в магазинах Opencart эти редиректы делаются через одно место, стандартный синтаксис с Redirect 301 не работает!
В итоге вместо нескольких минут задача заняла у меня целый день, включая поиск в интернете правильного решения, тестирования и создание своего файлика XLS, чтобы больше вручную не делать все эти редиректы в Опернкарте.
Напомню стандартный синтаксис редиректа:
Redirect 301 /smartfony https://newshop.by/smartphone
Redirect 301 - это начало редиректа
/smartfony - старый url без домена и https
https://newshop.by/smartphone - новый url с доменом и https
Попробуйте прежде всего именно этот вариант, но он чаще всего не сработает в Opencart. Не расстраивайтесь, ниже есть и другие варианты редиректов.
Прописываем правильный редирект в Opencart вручную
Итак, открываем файл .htaccess, он находится в корне сайта, для этого понадобится доступ по FTP (может пригодится как зайти по FTP на сайт).
И где-нибудь в начале файла после директивы RewriteEngine On и Options +FollowSymlinks вставляем редиректы.
Прежде всего, еще раз напомню, что стандартный редирект вида: Redirect 301 /старый адрес https://новый адрес в 99% случаев банально не работает и выдает ошибку.
Чтобы победить его в .htaccess нужно прописать другую конструкцию:
RewriteCond %{QUERY_STRING} ^_route_=адрес_старой_страницы.html$
RewriteRule ^(.*)$ https://ваш_домен.ru/новой_страницы/? [R=301,L]
Адрес старой страницы пишется без префиксов, вот так:
RewriteCond %{QUERY_STRING} ^_route_=oformlenie/$ RewriteRule ^(.*)$ https://belvii.by/oformlenie-pamyatnikov/? [R=301,L]
Еще вариант для каких-то сложных url типа https://platus.by/index.php?route=information/uni_news&news_id=2
RewriteCond %{REQUEST_URI} ^/index.php [NC] RewriteCond %{QUERY_STRING} ^(.*)news_id=2$ RewriteRule ^(.*)$ https://platus.by/news/? [L,R=301]
То есть сначала мы определяем условия - то есть наличие в запросе сложной конструкции с index.php, затем проверяем что именно там содержится нужный нам материал с id=2, при этом (.*) - означает любые символы до нужного нам news_id=2 и затем уже непосредственно редирект на какой-то адрес.
Проверял в разных вариантах - все работает отлично.
Спасибо за решение неизвестному автору.
Автоматизировать редирект Opencart
Мне пришло в голову, что млин, каждый раз вручную вставлять правильные адреса в эти 2 строчки довольно утомительно.
И поэтому если у вас есть список старых URL-адресов и новых, то задача сделать из них редирект - вопрос нескольких формул в Excel.
Вот что получилось:
В результате можно сразу загнать в файл весь список старых адресов и напротив них - новые, и получить готовый редирект для Opencart и Ocstore.
Качайте файл с моего сервера.
Прямо сейчас вы можете получить доступ к этому контенту для подписчиков. Достаточно ввести свой правильный емейл, и после подтверждения вам откроется полное содержимое этой страницы.
Получить бесплатно
Если на ваш емейл после подписки не приходит письмо для подтверждения уведомления (такое бывает иногда в зависимости от типа вашего ящика), то есть такие варианты:
- Подождите минут 5-10.
- Попробуйте другую почтовую сеть, лучше всего работают mail.yandex.ru или gmail.com.
- Проверьте папку СПАМ - может нужное письмо именно там. После чего обязательно отметьте его и кликните - НЕ спам.
- Если ничего не получилось, напишите мне в Контакты и укажите ссылку на страницу, версию браузера и примерный порядок действий.
Массовый редирект на новый домен
Ну и в заключении приведу простой код для массового редиректа всех страниц в магазине при переезде на новый домен или как в данном случае - когда хочется чтобы сайт был доступен с разных доменов, например, GrillKraft.ru и GrillCraft.ru.
Конечно, лучше сразу правильно подбирать домен для магазина, но если у вас уже есть необходимость в нескольких именах, то с помощью 301 редиректа вы добьетесь того, что со всех дублей будет загружаться только основной домен сайта.
Простой редирект с другого домена
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www\.)?grillcraft\.ru$ [NC] RewriteRule ^(.*)$ https://grillkraft.ru/$1 [R=301,L]
Редирект сразу с двух доменов
А если нужно сразу с двух доменов (например, английского и кириллистического) сделать редирект?
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www\.)?grillcraft\.ru$ [NC,OR] RewriteCond %{HTTP_HOST} ^(www\.)?xn--80afpie2adrr0f\.xn--p1ai$ [NC] RewriteRule ^(.*)$ https://grillkraft.ru/$1 [R=301,L]
Строка с xn--80afpie2adrr0f - чтобы показать как делать редирект с кириллистического домена магазина. Если у вас такого нет, можете просто удалить ее.
Редирект с поддомена
Работает, если нужно сделать редирект с поддомена на основной домен. Все страницы ведут туда, куда нужно, на соответствующие страницы основного сайта.
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^new.orion-arzamas.ru$ [NC] RewriteRule ^(.*)$ https://orion-arzamas.ru%{REQUEST_URI} [R=301,NC,L,QSA]
Добавляйте эту конструкцию в .htaccess файл старого сайта и у вас будет происходить 301 редирект в вашем магазине со всех страниц старого домена на новый.
Массовый редирект внутри категории
Часто бывает, что поменялся адрес категории, а чпу для товаров остались прежними.
Нужно обязательно убедиться, что старый товар открывается без проблем. Ну типа такого: http://test1.moytop.com/kategoriya-new/zhenskaya-steganaya-kurtka-scanndi-cw2611
Если будет ошибка 404 (нет такой страницы, обновите кэш в Opencart и браузере и попробуйте еще раз). Опять ошибка? Тогда нужно прописывать редирект, если этого не сделать, то есть риск, что товары вылетят из индекса.
При этом товаров могут быть тыщи, согласитесь, нужно простое решение, не перелопачивать же все товары вручную!
Если у вас установлен Ocstore, то там есть SEO PRO и это дело работает автоматически. НО! Не у всех! И не всегда! И не в во всем контенте!
Поэтому если по каким-то причинам автоматом не получилось сделать, то нужно вручную массово поменять URL категории и при этом оставить рабочими все товары (автоматически проставить редирект, чтобы не было 404 ошибки).
Вот такой код редиректа у меня работает в Опенкарте, проверял на 2 и 3 версии:
RewriteEngine On RewriteBase / RewriteRule ^kategoriya-old/?(.*)$ https://test1.com/kategoriya-new/$1 [R=301,L]
или такой вариант:
RewriteCond %{QUERY_STRING} ^_route_=kategoriya-old/?(.*)$ RewriteRule ^(.*)$ https://test1.com/kategoriya-new/? [R=301,L]
test1.com - ваш новый домен
kategoriya-old - старая категория (без https)
kategoriya-new - новая категория (с https)
Обязательно обратите внимание на следующее:
- Добавляйте код повыше, можно вообще в начало htaccess, чтобы редирект работал раньше других правил.
- Обращайте внимание на слеши / - они должны быть.
Редирект 404 страницы на главную
Иногда в магазине разом меняются все URL товаров или категорий (например, при переезде на новый движок или при большой смене ассортимента) и возникает куча страниц, где выдается 404 ошибка - мол, этой страницы по данному адресу больше не существует.
Я уже выше рассматривал как надо правильно настраивать редиректы на каждый URL, но ведь иногда не хочется заморачиваться и не делать такие "точечные" редиректы, а просто взять и переадресовать все 404 страницы, например, на главную страницу.
Не хочу разбирать, почему это не особо правильный подход, просто приведу решение как это сделать (проверял на Опенкарт 3, думаю на 2 тоже должно работать):
- Открываем файл catalog/controller/error/not_found.php
- Включаем добавляем в начало код:
<?php header("Status: 301 Moved Permanently"); header("Location:https://ваш-новый-сайт.ru/"); ?>
В этом случае все страницы, которые выдают ошибку 404 станут ссылаться на главную страницу нового сайта на Опенкарт.
Редирект на SSL
Я уже ранее разбирал как делается редирект с http на https opencart, поэтому почитайте там.
Если ничего не получилось
Ну бывает, что никакие советы не помогают
Тут может и хостер быть косячный, и шаблон Opencart иметь какие-то хитрые модули на борту, и просто звёзды на сошлись.
В этом случае, не тратьте своё драгоценное время, отправляйтесь на биржу Кворк в раздел редиректы и вам сделают всё, что нужно всего за 500₽
Успехов в нелегком деле настройки редиректов для Opencart. Хотя это и удачная система в целом (читайте выбор движка для магазина), но редиректы в ней отличаются от других CMS.
У меня после добавления редикта RewriteCond %{QUERY_STRING} ^_route_=oformlenie/$
RewriteRule ^(.*)$ https://belvii.by/oformlenie-pamyatnikov/? [R=301,L] (своих ссылки конечно же, редикт начал работать, но в админке при попытке редактировать новость, стала выдаваться ошибка)
Спасибо!
применил на версию 1,5 работает.
Удивлен и благодарен, подписался первый раз в жизни на ваши новости
Единственный редирект, который помог, спасибо!
Не работает. Прописывал разные варианты, ни один не подошёл:
# 301 редиректы
RewriteCond %{QUERY_STRING} ^_route_=https://dezmagazin.ru/index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5$
RewriteRule ^(.*)$ https://dezmagazin.ru/specpredlozhenie/? [R=301,L]
RewriteCond %{QUERY_STRING} ^_route_=https://dezmagazin.ru/index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5
RewriteRule ^(.*)$ https://dezmagazin.ru/specpredlozhenie/? [R=301,L]
RewriteCond %{QUERY_STRING} ^_route_=/index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5$
RewriteRule ^(.*)$ https://dezmagazin.ru/specpredlozhenie/? [R=301,L]
RewriteCond %{QUERY_STRING} ^_route_=/index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5
RewriteRule ^(.*)$ https://dezmagazin.ru/specpredlozhenie/? [R=301,L]
RewriteCond %{QUERY_STRING} ^route=/index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5
RewriteRule ^(.*)$ https://dezmagazin.ru/specpredlozhenie [R=301,NC,L]
вы не так прописывали.
RewriteCond %{QUERY_STRING} ^_route_=index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5$
RewriteRule ^(.*)$ https://dezmagazin.ru/specpredlozhenie/? [R=301,L]
вот так надо было
Сергей, вписал, всё равно не работает, можете сами проверить. https://dezmagazin.ru/index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5
так у вас нет ЧПУ страницы https://dezmagazin.ru/specpredlozhenie/ - я ее ввожу в браузере, у меня открывается https://dezmagazin.ru/index.php?route=barbarablog/single&barbara_blog_path=2&barbara_post_id=5
попробуйте сделать редирект на страницу, которая имеет чпу, например https://dezmagazin.ru/sredstva-dlya-dezinsekcii/zhidkie-insekticidy/ или на главную.
и вот так, я в прошлом посте ошибся, без index.php:
RewriteCond %{QUERY_STRING} ^_route_=barbarablog/single&barbara_blog_path=2&barbara_post_id=5$
RewriteRule ^(.*)$ https://dezmagazin.ru/? [R=301,L]
Да в том-то и дело, ЧПУ specpredlozhenie к этой новости задано в админке, но не работает почему-то. Это проблема данного купленного шаблона, хотя в админке ЧПУ выставляется, оно не используется. Сделать тут что-либо сложно, надо изучать как в php формируются ссылки и переписывать.
Обычно ссылки формируются только средствами самой cms, без использования шаблона, чаще всего используется модуль seo pro, он унифицирован и практически у всех работает одинаково.
Но в любом случае это стоит сделать прежде всего, чтобы все ссылки были ЧПУ и правильно отображались, потом уже редиректы смотреть по необходимости.
Ну в таком случае у CMS какой-то глюк именно при формировании ЧПУ новостей, для всех страниц заданные ЧПУ работают, а для новостей нет. Не знаю, может в СЕО-ПРО надо покопаться.
в ocstore встроенный блог, пробовал добавлять - всё норм, там вручную seo url пишется.
типа такого http://shop.moytop.com/obzory/vybor-obuvi/
а если в шаблоне собственный модуль блога, то это, конечно, возможно.
в этом случае проще всего обратиться к автору шаблона, может уже есть обновление.
Ну да, там в настройках шаблона есть раздел новости, да, пожалуй напишу автору шаблона, мы всё-таки деньги заплатили. Спасибо.
Сергей, здравствуйте.
Хотел у вас уточнить, при смене CMS появилась необходимость настроить 301 редиректы.
Спасибо за статью, все подробно описано, но возникло несколько вопросов.
Сейчас url'ы товаров выглядят так:
site.ru/products/tovar1
site.ru/products/tovar2
site.ru/products/tovar3
...итд
На новом сайте на opencart:
site.ru/tovar1
site.ru/tovar2
site.ru/tovar3
...итд
Правильно ли я понял, что достаточно прописать массовый редирект:
"RewriteCond %{QUERY_STRING} ^_route_=products/$
RewriteRule ^(.*)$ https://site.ru/? [R=301,L]"
после чего все товары будут открываться по url'ам без products?
Добрый день. Подскажите как поставить редирект со страниц https://mysite.com////// со слешами в конце на странице без слеша - https://mysite.com
Здравствуйте, не подскажу, никогда раньше не сталкивался.. )
Благодарю вас!!! Отличная инфа по редиректам на опенкарт!
Помогите! после редиректа появляеться ошибка 404...
https://wilgood-servis.ru/remont-akpp-i-kpp-v-solnechnogorske/
редирект на
wilgood-servis.ru/remont-akpp-i-kpp-v-zelenograde/
А скрин htacces файла со строкой редиректа есть?
# SEO URL Settings
RewriteEngine On
# If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
RewriteCond %{QUERY_STRING} ^_route_=remont-akpp-i-kpp-v-solnechnogorske/$
RewriteRule ^(.*)$ https://wilgood-servis.ru/remont-akpp-i-kpp-v-zelenograde/? [R=301,L]
### Additional Settings that may need to be enabled for some servers
### Uncomment the commands by removing the # sign in front of it.
### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that.
solnechnogorske/$ - попробуйте без / и zelenograde/? тоже, то есть
RewriteEngine On
RewriteCond %{QUERY_STRING} ^_route_=remont-akpp-i-kpp-v-solnechnogorske$
RewriteRule ^(.*)$ https://wilgood-servis.ru/remont-akpp-i-kpp-v-zelenograde? [R=301,L]
и попробуйте поставить в самый вверх этот редирект.
если не получится, попробуйте уточнить момент у хостера.
Спасибо! это работает
Сергей, спасибо большое за файл с редиректами - помогло!
Мне не помогла Может кто подскажет?
Старый: http://piroflame.ru/articles.php/tPath/8/category/NOVOSTI
Новый: http://piroflame.ru/news
Возможно какие-то настройки хостера мешают.
Попробуйте им написать, обычно нормальный хостер может помочь, если сформулировать, мол "на другом хосте работает, а у вас нет, в чем может быть причина, может какие-то особые настройки htaccess у вас и т.п.".
Помогло такое решение
Redirect 301 /articles.php/tPath/8/category/NOVOSTI http://piroflame.ru/news?
P/S обязательно в конце знак вопроса "?"
Opencart 2.3.0.2.5 pro
Спасибо, помогло!
При редиректе на подкатегорию, исчезает категория, т.е если я вызываю категорию ( в которой теперь сидят подкатегории) она сразу редиректит на подкатегорию, а нужно чтоб она осталась, а товары все бы редиректились из категории в подкатегории. Наверно это невозможно сделать .Но в вебмастере теперь весь товар который сидит уже в подкатегориях показывает ошибку 404
А какая версия у вас, и Opencart или Ocstore?
Здравствуйте. Скажите, а возможно ли сделать так: была одна категория, теперь нужно разбить её на подкатегории, соответственно товары расходятся по подкатегориям. Можно ли такой сделать массовый редирект из категории в подкатегории?
Здравствуйте, да, я так делал.
Потому внизу и написал в разделе "Массовый редирект внутри категории"
RewriteEngine On
RewriteBase /
RewriteRule ^kategoriya-old/?(.*)$ http://ваш домен/kategoriya-old/kategoriya-new/$1 [R=301,L]
По идее должно сработать.
Кроме того, обратите внимание, что при перемещении товаров из категории в подкатегорию и выставлении "Главной категории" (которая есть в Ocstore) происходит автоматический редирект (для Ocstore 2.3 и выше).
То есть если вы вручную выставляете в товаре главную категорию новую, то редиректы делаются автоматически.
Спасибо Сергей за инструмент.Сделал вот такой редирект RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349/$
RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia/? [R=301,L]
Не помогло.Вот скрин файла http://prntscr.com/mtieg0
да не за что, видите, не всегда срабатывает, есть особенности у разных сайтов.
попробуйте modelnye_chekhly/kia_349/ - на конце не указывать слеш.
и/или наоборот после редиректа не указывать слеш RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia
то есть вот так например:
1 --------------
RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349/$
RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia? [R=301,L]
2 --------------
RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349$
RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia? [R=301,L]
3 --------------
RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349$
RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia? [R=301,L]
и т.п.
у меня бывало именно слеш влиял на работу.
вдруг и вам поможет )
Добрый день! Спасибо за помощь, тоже помогло! Подскажите, если мне надо сделать 301 редирект таким способом около 500 позиций, это будет нормально? Я имею ввиду, не будет ли каких-то негативных последствий для сайта, например он станет медленнее загружаться или еще что-то подобное?
добрый, не замечал никакой нагрузки, делал около 200 записей.
возможно, зависит от посещаемости, но как мне кажется, что при редиректах нагрузка на хостинг небольшая, может кто больше знает по нагрузке, то подскажет.
RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteRule ^(.*)$ ? [R=301,NC,L]
мне вот так помого
А если у тебя 10 000 позиций со старого сайта, где изменились url ? Мы апачь не повесим таким способом ?
Я бы не стал 10000 позиций вручную менять через список 301 редиректов.
Обычно ведь редирект - это смена каких-то общих родительских URL, а не всех URL товаров, например:
Было: https://site.com/category1/statya.html
Стало: https://newsite.ru/category8901/statya.html
То есть URL конкретных конечных страниц редко меняются.
В этом случае имеет смысл заказать написание или скрипта редиректов или формулы для редиректа с учетом специфики изменений.
На биржах фриланса можно найти профессионалов по администрированию серверов, они напишут относительно недорого.
Если же у вас поменялись все URL, например:
Было: https://site.com/category1/statya.html
Стало: https://newsite.ru/category8901/novye-statii.html
И таких страниц очень много, то IMHO проще забить на это в принципе.
Сделать редирект только основных категорий и всё.
Поисковик через пару недель сам определит новые URL, в поиске обычно они не проседают, так как это низкочастотники.
Да, но у меня разбивается на 2 сайта, поэтому приходится делать карту редиректов.
Я сделал по другому.
Старые адреса и новые записал в базу данных по соответвию.
Оттуда запросом забирал и перенаправлял php редиректом. Пришлось поменять немного контроллер.
А можете подсказать, как прописать редирект чтобы перправляло с http://www.goldentimenn.ru/man/ на https://lux33.ru/mens/.
Все конструкции перепробовал - ни одна корректно не работает.
Если так не работает:
RewriteCond %{QUERY_STRING} ^_route_=man/$
RewriteRule ^(.*)$ https://lux33.ru/mens/? [R=301,L]
то не подскажу... Может кто из читателей сталкивался.
Спасибо помогло, но не могу средиректить страницы типа "/index.php?route=product/category&path=33"
Что можно с этим сделать?
я бы вот так попробовал:
====================
RewriteCond %{QUERY_STRING} category&path=33$
RewriteRule ^(.*)$ http://moytop.com/? [R=301,L]
====================
только свой адрес вместо moytop.com не забудьте.
у меня на магазине такая связка работает, проверил сейчас.
если и у вас получится, то хорошо.
естественно, редиректы должны стоять после:
RewriteBase /
но перед системными редиректами, которые там идут стандартно в любом Опенкарте.
Все работает, еще раз спасибо !
Огромное спасибо! Мне это помогло!
А мне помогло вот так:
RewriteCond %{QUERY_STRING} ^route=information/contact$
RewriteRule ^(.*)$ contacts? [R=301,NC,L]
Спасибо! Возникла такая ситуация, что 301 редирект с одной страницы сделал. Затем хотел сделать еще один, вставил строки в файл и появилась ошибка, которая не позволяет зайти на сайт. Почему так можете подсказать?
где-то проблема в синтаксисе.
что-то не так скопировалось или вставилось, или не туда, или что-то заменили.
в htaccess важна каждая мелочь.
попробуйте еще раз внимательно вернуть назад и внести новый редирект.
Отлично! То что надо... Спасибо огромное!
Спасибо! Метод помог настроить редиректы, долго мучался.
Спасибо Вам огромное! Два дня лапатил этот 301 и тут всё получилось!