Меняем параметры запроса 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.

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

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

Установка Symfony на Denwer и Open Server

Март 8, 2016 г.

Симфония диктует стиль работы, свойственный для работы с ПО под unix системами. Т.е. чтобы что то сделать, вам необходимо сначала понять как это сделать. ...

Читать

Добавление SSL сертификатов для разных сайтов на одном ip

Январь 19, 2018 г.

Давайте рассмотрим порядок действий и настройку SSL сертификата в apache2. В сети довольно много гайдов. Все они примерно следуют одному и тому же алгоритму. ...

Читать

 

Комментарии к «Меняем параметры запроса 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 часа после их неактивности.