Недавно я занимался переносом сайта с самодельного движка на битрикс. В круг задач, помимо сохранения внешнего вида и функционала, входила задача сохранения некоторых ссылок, по которым проводилось продвижение. На сайте был самый простой и самый сердитый вид ЧПУ, из всех известных мне, — ссылки, а точнее полные пути, вручную забивались для каждой страницы. Разумеется, в битриксе всё иначе, поэтому старые ссылки сохранить было невозможно.

Обычно в таких случаях довольствуются 301 редиректом со старых адресов на новые, вручную прописывая их в .htacceess’е. Но наш случай сложнее: нужно было непременно сделать так, чтобы по старым ссылкам открывались страницы без всяких редиректов.

Как же заставить битрикс думать, что к нему пришли по новому адресу, когда на самом деле в браузере был вбит старый? Решение простое: чтобы понять, какой контент показать, движок анализирует запрос, а именно переменную $_SERVER['REQUEST_URI']. Так давайте её подменим еще до того как движок вступит в дело. Тогда, если в этой переменной окажется старый адрес, то мы его поменяем на новый и битрикс покажет нам нужную страницу. Для этого нужно изменить в.htaccess строчки

RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$

RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

на

RewriteCond %{REQUEST_FILENAME} !/bitrix/old2new.php$

RewriteRule ^(.*)$ /bitrix/old2new.php [L]

Это перенаправит все запросы на несуществующие файлы в наш скрипт /bitrix/old2new.php, где мы сможем легко изменить переменную $_SERVER['REQUEST_URI'] и после этого передать управление битриксу подключив файл /bitrix/urlrewrite.php:

require($_SERVER[“DOCUMENT_ROOT”;].“;/bitrix/urlrewrite.php”;);

Получилось такое своеобразное проксирование. Кстати, если на сервере есть nginx, то лучше подобные махинации проделать в нём.

 

 

Комментарии

comments powered by Disqus