AddThis Smart Layers

четверг, 5 сентября 2013 г.

Шпаргалка по .htaccess

Один из наших клиентов недавно мигрировал с платформы LiveCity на Magento.
Сайт довольно большой, с тысячами товаров, сотнями категорий и множеством страниц контента.
При этом, сайт довольно популярный и хорошо проиндексирован Гуглом. Совсем не хочется клиенту терять позиции в результатах выдачи Гугла.

В Magento существует довольно продвинутый и удобный механизм URL Rewrite Management, позволяющий быстро создавать кастомные редиректы.
Все бы ничего, но проблема в том, что на старой платформе не было возможности создавать редиректы, когда пользователь заходил на сайт без www, чтобы система могла автоматически перенаправлять на адрес с www.
В результате со временем образовалось какое-то дикое количество дублирующихся ссылок.
Но даже это не было бы такой уж страшной проблемой, если бы Magento была настолько "тупой" системой и позволяла бы все также заходить на те или иные страницы с www и без него.

Так как Magento все же несколько продвинутее, у нас образовалась новая проблема, когда пользователь заходил на сайт по ссылке без www, его просто перебрасывало на главную страницу. А вот это уже совсем грустно.

Пришлось помучать немного .htaccess


Получилась у меня вот такая конструкция:
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.example\.com\/$1" [NE,NC,QSA,L,R=301]

Теперь немного объясню что здесь к чему.

Сначала мы задаем условие - нас интересуют только те запросы, которые идут без www.
Далее, мы создаем редирект, сохраняя оригинальный запрос, но только добавляем ему www.

Вся фишка здесь заключается во флагах [NE,NC,QSA,L,R=301]

Дело в том, что на старой платформе часть адресов была с использованием иврита (т.е. не латиницы).
Поэтому, чтобы объяснить серверу, что не нужно декодировать URL мы используем флаг NE.

Другие же адреса были с параметрами, которые также по умолчанию обрезаются сервером при редиректе. Чтобы этого не происходило, мы добавляем флаг QSA.

Если и этого недостаточно, то на старой платформе некоторые адреса использовали различные регистры. Для того чтобы наш сервер это понимал и относился к таким адресам со снисхождением используем флаг NC.

Флаг R=301 говорит уже броузеру или же любому поисковому роботу, что старого адреса больше не существует, а вместо него нужно использовать новый. В нашем случае этот новый будет использовать www.

Ну и последний флаг L говорит серверу "всем спасибо все свободны". Т.е. после того как сделан редирект не нужно больше пытаться еще что-либо делать с заданным условием. Потому что сразу же после выполнения моего условия на сцену выходит сама Magento и включается в работу ее механизм URL Rewrite Management. Мы не будем ему мешать.

Комментариев нет :

Отправить комментарий