@Misha7

Как передать массивы get, post через htaccess ? ?

Как с помощью mod_rewrite сделать редирект с передачей массивов $_GET и $_POST. То есть пользователь форму с помощью mod_rewrite делается редирект с передачей массива post
  • Вопрос задан
  • 3885 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
с передачей массива post


Почитайте на википедии что такое HTTP и что такое тело запроса. То что вы видите в PHP под этими суперглобальными $_SERVER/$_POST/$_GET/$_FILES и т.д. это все благодаря такой чудной вещи как SAPI (Server Application Programming Interface). То есть заболтивый PHP берет ваш HTTP запрос (который ему дали обработать WEB-сервера, апач тот же или nginx или еще кто) и вызывает соответствующее SAPI. То есть если у нас mod_php апачевский, то там все чуть по другому (SAPI для PHP много всяких разных). Если у нас php-fpm, то у нас там самый что нинаесть запрос, который нам проксировал какой nginx или тот же апач. Этот самый SAPI берет заголовки запроса и распихивает все по суперглобальным массивам. Он берет заголок с куками и распихивает его в $_COOKIE или видит что у нас POST запрос и он помечен как multipart/formdata и разбирает запрос, выковыривает файлики и сохраняет на диск заполняет массивы $_POST/$_FILES. Скажем если чувак отправит запрос с Content-Type: application/json (что модно стильно молодежно для мобильных клиентов) то PHP SAPI разобрать его будет не в состоянии и вам придется брать тело запроса и разбирать его самому.

Работа вашего скрипта происходит только ПОСЛЕ того как SAPI все подготовит. а htaccess влияет на работу только до того как SAPI начнет работу, так что никаких POST массивов и т.д. Только HTTP запросы.

Редиректы намного интереснее, так как это результат запроса. Ну то есть... у него нету тела. нет возможности сохранить тело запроса (ну как... есть... но клиент тоже это должен уметь и одним htaccess тут не обойтись) так что при редиректе сохранить и передать на новый урл исходные данные уже не выйдет. То есть можно, но повторюсь - это должно быть реализовано с двух сторон и тогда это не совсем редирект а больше похоже на то что вы отправляете форму двумя запросами. Один - узнает куда слать данные формы, второй отправляет.

Такие дела.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@algebris
Javascript Full Stack Developer, UNIX expert
читайте внимательно мат. часть beget.ru/art_htaccess
юзайте Google, не стесняйтесь ...
Ответ написан
opium
@opium
Просто люблю качественно работать
Редирект не сделать. делайте реврайт или используйте mod_proxy или proxy_pass в nginx.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы