14 ноября 2011 г.

Сохраняем часть Url при перенаправлении через .htaccess

   Наверное, немало веб-мастеров при работе с сайтами сталкивались с необходимостью сделать перенаправление с динамического адреса страницы на статический. В файле .htaccess создаётся правило и веб-сервер выполняет действие - ничего сложного. Но что же делать, если есть потребность перенаправлять с одного адреса на другой, при этом сохраняя отдельные его элементы, которые постоянно меняются? Разделы справки не сообщают о подобных перенаправлениях.

   Допустим, на сайте имеется каталог статей. Адреса страниц статей имеют вид site.ru/catalog/index.php?page=art&cat=19&art=1372&task=show, где 19 и 1372 - данные, которые могут меняться в зависимости от категории и конкретной статьи и всегда являются цифрами. Перед веб-мастером встала задача перенаправлять посетителей на страницы с адресами вида site.ru/index.php?cat=19&art=1372.

   Как видно из задачи, веб-мастеру необходимо будет написать правила, которые бы переносили лишь часть адреса, отбрасывая ненужную информацию. Для этого необходимо обозначить нужные нам данные как переменные, чтобы сервер брал их из начальных адресов и переносил в новые. Выглядеть готовое правило будет так:
RewriteCond %{QUERY_STRING} ^page=art&cat=([0-9]+)&art=([0-9]+)&task=show
RewriteRule ^catalog/index\.php$ http://site.ru/index.php?cat=%1&art=%2 [R=301,L]
   Эти правила позволят перенаправлять посетителей и роботов поисковых систем с адресов старых страниц статей на новые. Ничего сложного, нам потребовалось лишь несколько символов.

   ([0-9]+) - данная конструкция означает символ или группу символов, в которой могут находиться лишь числа. Знак + означает, что предыдущий символ должен употребляться хотя бы один раз - то есть, значение не может быть пустым.

   %1 и %2 - так обозначаются переменные, а точнее - группы символов, которые были взяты в скобки. Их расположение можно менять в зависимости от нужного результата, но цифры всегда будут означать порядковый номер той группы символов, которую необходимо поставить на это место.

   Остальные данные могут меняться в зависимости от исходных адресов и адресов, на которые необходимо сделать перенаправление.

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

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