Как получить запрос `$ _POST`, когда 404 перенаправляется через .htaccess?

Этот вопрос несколько связан с моим предыдущим вопросом . Трюк использования $_SERVER['REDIRECT_QUERY_STRING'] работает только для переменных $_GET .

Ну, у меня есть файл index.php который обрабатывает все 404 redirects .

Если пользователь запрашивает страницу, которая не существует, скажем, apple.php?item=23 , то с помощью $_SERVER['REDIRECT_QUERY_STRING'] я могу получить переменную item=23 $_GET item=23 , но если переменная не равна $_GET $_POST затем $_SERVER['REDIRECT_QUERY_STRING'] не работает.

Как я могу получить переменную $_POST когда я перенаправляю ее на index.php используя следующую настройку .htaccess

ErrorDocument 404 /index.php

Проверьте ответ здесь: http://www.brainonfire.net/blog/apache-pitfall-errordocument-post/

Я решил проблему, используя это.


ИЛИ поместите это в свой файл .htaccess:


     RewriteEngine On
     RewriteBase /


     RewriteCond% {REQUEST_FILENAME}! -f
     RewriteCond% {REQUEST_FILENAME}! -d
     RewriteRule.  /yourErrorDocument.php [L]

Следуя директиве:

 ErrorDocument 404 /index.php 

веб-сервер apache выполняет внутреннюю перенаправление на новое местоположение. Внутренние средства, клиент (браузер) не будет изменять URL-адрес в адресной строке, потому что это перенаправление не передается в браузер.

Поскольку это перенаправление, запрос POST превращается в запрос GET.

Вы можете увидеть это, просмотрев следующие две переменные $_SERVER :

 $_SERVER['REDIRECT_REQUEST_METHOD'] # POST $_SERVER['REQUEST_METHOD'] # GET 

Короче говоря, вы не можете использовать директиву ErrorDocument для перезаписи URL-адресов для запросов HTTP POST.

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

Используйте директиву ErrorDocument вместо директивы ErrorDocument Apache: она выполняет трюк FallbackResource на веб-сайте Apache

Пример:

 FallbackResource /404.php