Меняем параметры запроса GET с помощью mod rewrite

Модуль rewrite сервера Apache предоставляет мощные возможности по перенаправленнию запросов. Это позволяет ещё до обработки запроса, к примеру, в коде программы на PHP вашего сайта, выполнить рутинные операции по изменению адреса страницы, параметров запроса и т.п.

В данной статье мы рассмотрим случаи, когда необходимо убрать параметры GET, или наоборот добавить/изменить.

Общие принципы

Если вы уже знаете, что такое mod_rewrite, как им пользоваться под apache, то пропускайте эту часть статьи.

Apache управляется конфигурационными файлами с именем .htaccess в директориях сервера и выполняет соответствующие инструкции. Главным из них является файл находящийся в корне сайта. В подкаталогах вашего сайта также могут находится .htaccess файлы, дополняющие/изменяющие директивы заданные в файлах ближе к корню.

Вот пример типичной переадресации в CMS средствами «мод рерайт»:

Этот базовый пример не сможет показать все разнообразие возможностей, посмотрите обязательно полное описание команд модуля Rewrite.

Есть отличие перенаправления от переадресации.

Перенаправление

Отличие заключается в том, что в первом случае происходит обработка запроса, так как будто он был выполнен к указанному в перенаправлении скрипту/файлу/адресу. В нашем случае мы направляем все запросы к index.php

Переадресация

При переадресации, а в этом случае я бы добавил специальный флаг [R]:

Сервер ответит клиенту, что нужно перейти по указанному адресу. Тогда клиент вновь запросит сервер, но уже по новому адресу. В адресной строке браузера, к примеру, отобразится этот новый адрес.

Теперь, когда вы имеете общие представления о работе модуля, то я покажу вам несколько примеров как с его помощью работать с параметрами GET .

Добавляем параметры GET к запросу в mod rewrite

Пример запроса:

http://mysite.ru/vazniy-razdel.html

нужно переадресовать на

http://mysite.ru/drugoy-razdel?param1=value

Так мы добавили при переадресации нужный нам параметр GET param1.

Убрать любые GET параметры в запросе в mod rewrite

Пример запроса:

http://mysite.ru/vazniy-razdel.php?param1=value

нужно переадресовать на

http://mysite.ru/new-address.php

Так мы переадресуем только запрос, где есть param1=value. Если надо убрать параметры GET и выполнить редирект для любых вариантов запроса скрипта vazniy-razdel.php, то правило будет выглядеть вот так:

Теперь любые запросы на /vazniy-razdel.php переадресуются в новый раздел, при этом параметры GET будут убраны.

Заменить имя GET параметра в запросе на другое в mod rewrite

Пример запроса:

http://mysite.ru/vazniy-razdel.php?param1=value

нужно переадресовать на

http://mysite.ru/new-address.php?prm=value

Так мы заменили параметр param1 на prm.

Написать комментарий

Мало букафф? Читайте есчо !

Водяные знаки, которые не зависят от движка.

Декабрь 25, 2009 г.

Водяные знаки (watermarks) - это не хитрый приём, который используют на многих сайтах, чтобы избежать "утечки" картинок. Суть проста - на картинки контент области (публикаций сайта) производят наложение логотипа или надписи с названием сайта и т.п. Разместить ...

Читать

Редирект на HTTPS после прокси в apache

Август 20, 2019 г.

Что делать, если необходимо организовать редирект на версию сайта с HTTPS протоколом, когда ваш сервер принимает запросы не напрямую, а находясь за прокси сервером (например после nginx). Проблема в том, что порт, с которым работает веб сервер, ...

Читать

 

Комментарии к «Меняем параметры запроса GET с помощью mod rewrite»

Понравилась статья? Есть вопросы? - пишите в комментариях.



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

Много комментариев в “Меняем параметры запроса GET с помощью mod rewrite”

  1. олег:

    Боты постоянно создают новые корзины с товаром, в резудьтате растет база.
    Перепробовал много вариантов пернаправления запроса в .htaccess, но пока ничего не работает

    Боты формируют запрос
    jojoba.ru/cart.php?add=&id_product=15199&token=af735e7f7a28f4334932c558a86bafe3
    где id_product=15199 и token=af735e7f7a28f4334932c558a86bafe3 меняются
    то есть нужно перенаправлять запросы к
    jojoba.ru/cart.php?add=&id_product= слюбым значением после id_product на /404.php

    • Что то вроде этого вам нужно?
      RewriteCond %{QUERY_STRING} ^id_product=(.*)$ [NC]
      RewriteRule ^cart\.php$ /404.php [R=301,L]

      Как бы при этом нормальных покупателей на 404 не выпихнуть. Я бы просто корзины анонимов удалял через 1-2 часа после их неактивности.