Перейти к содержимому



Как работает mod_rewrite

#21 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 06 Май 2010 - 15:49

заказал в магазине, буду ждать.
а как сделать, чтоб GET запрос стал обрабатываться
  • 0

#22 reaboom

reaboom
  • Пользователь
  • 40 сообщений
  • Репутация: 0

Отправлено 07 Май 2010 - 19:59

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

Что-то у меня не получается через mod_rewrite их передать. С вопросительным знаком проблемы какие-то.
Если очень надо, как вариат, можно вытаскивать GET параметры вручную из $_SERVER['REQUEST_URI'].

P.S.
А зачем вам нужны обычные GET-параметры, если вы используете mod_rewrite? Мне просто такого не требовалось не разу :(
  • 0

#23 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Май 2010 - 18:55

sc2r2bey, сижу и сползаю под стол, сколько же вопросов...

а как сделать, чтоб GET запрос стал обрабатываться

Флаги есть в mod_rewrite. Вам надо использовать для нужной регулярки флаг QSA.
Я понял твою проблему, у тебя, к примеру, есть форма, которая передаёт данные по GET, а ссылка, куда перенаправляет форма у тебя в ЧПУ. Естественно параметры отбросятся без флага.
Пример регулярки:
RewriteRule ([a-z]+)/([0-9]+)/ index.php?module=$1&page=$2 [QSA]

По флагам в .htaccess:
  • R (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например «R=301» возвратит редирект с кодом 301 (MOVED PERMANENTLY).
  • F (forbidden) возвращает ошибку 403 (FORBIDDEN).
  • G (gone) возвращает ошибку 410 (GONE).
  • P (proxy) – по этому флагу Apache выполняет подзапрос (sub-request) к указанной странице с использованием программного модуля mod_proxy, при этом пользователь ничего не узнает об этом подзапросе. Если модуль mod_proxy не входит в состав вашей сборки Apache, то применение данного флага вызовет ошибку.
  • L (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.
  • N (next) запускает процесс преобразования с первого по порядку правила.
  • C (chain) объединяет несколько правил в цепочку. Если первое правило цепочки «не срабатывает", то вся цепочка игнорируется.
  • NS (nosubreq) разрешает "срабатывание" правила только для настоящих запросов, игнорируя подзапросы (подзапрос может быть вызван, например, включением файла при помощи директивы SSI*).
  • NC (nocase) отключает проверку регистра символов.
  • QSA (qsappend) добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны.
  • PT (passthrough) останавливает процесс преобразования и передает полученную новую ссылку дальше «по цепочке», чтобы над ней могли «поработать" директивы Alias, ScriptAlias, Redirect и им подобные (тогда как при флаге L новая ссылка считается окончательной и не подлежит дальнейшей обработке).
  • S (skip) пропускает следующее правило, если данное правило "сработало". Можно пропускать несколько правил, если указать их количество, например: «S=3».
  • E (env) устанавливает переменную окружения, например: «E=??переменная:значение ==??".

reaboom,

Кстати, после прочтения главы из книги, советую еще почитать про маршрутизацию с помощью PHP (правда не знаю где). А то, к каждому запросу регулярку в .htaccess писать, это не дело

По этому поводу, можно сделать как в Joomla. Написать класс-роутер, отвечающий за маршрутизацию по скрипту. А вся строка в запросе разбирается роутером (это я про Joomla с ЧПУ)
  • 0


Оформление форума – IPBSkins.ru