colonel
@colonel
Разработчик PHP, Laravel

Как сохранить параметры запроса при перенаправлении через ErrorDocument в .htaccess?

Обнаружил, что параметры get и post запросов теряются,

если направление происходит через ErrorDocument.


Например, содержание .htaccess:
ErrorDocument 404 /test.php


Содержание test.php
echo '$_REQUEST:<br />';
  var_dump($_REQUEST);
  echo '<br />';

  echo '$_POST:<br />';
  var_dump($_POST);
  echo '<br />';

  echo '$_GET:<br />';
  var_dump($_GET);
  echo '<br />';

  echo '<br />--------------------<br />';

  echo 'POST-TEST:<br />';
  echo '<form action="" method="post">
        <input type="text" name="bla" /><br />
        <input type="submit" value="Send" />
      </form>';



Пример edelen.ru/bla


При этом, если зайти напрямую на edelen.ru/test.php

всё работает.


Если направление через mod rewrite, то, конечно параметры не теряются, но всё же не могу понять, почему

они теряются через ErrorDocument.
  • Вопрос задан
  • 6250 просмотров
Решения вопроса 1
colonel
@colonel Автор вопроса
Разработчик PHP, Laravel
Вообщем ответ видимо, — никак:
Здесь пишут:
Суть заключается в использовании директивы Error Document для перенаправления всех несуществующих запросов на один скрипт.
Главный существенный недостаток Error Document – невозможность перехвата POST-данных!
Чтобы получить POST данные формируйте action формы на реально существующий URL.
Также, к недостаткам относится то, что засоряется error.log сервера, что мешает выявлению настоящих ошибок, которые необходимо исправить.


Всем спасибо за ответы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
mark_ablov
@mark_ablov
action=«test.php»?
Ответ написан
colonel
@colonel Автор вопроса
Разработчик PHP, Laravel
При этом запрос будет идти напрямую к test.php, что логично,
и перенаправления по ErrorDocument не произойдёт.

Вопрос-то в том, как сохранить параметры запроса именно проходящего через ErrorDocument
Ответ написан
Комментировать
Kindman
@Kindman
В файле .htaccess пишем:
ErrorDocument 404 /404.php
а, вот с этим файликом можно поиграться:
404.php
<?php
echo "<xmp>";
print_r($GLOBALS);
На все запросы он печатает дамп переменных среды PHP. Как обрабатывать значения переменных — дело вкуса. Среди этих переменных будут и ваши параметры (кроме, возможно, тела POST-запроса).
Кстати, тело POST-запроса тоже можно где-то найти.
Ответ написан
shushu
@shushu
Попробуйте проверить:

var_dump($_SERVER['REDIRECT_URL']);
Ответ написан
Riateche
@Riateche
Вы в ErrorDocument указываете url, поэтому происходит редирект. Попробуйте указать файл скрипта, тогда при возникновении ошибки этому скрипту управление будет передано без редиректа.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы