Этот вопрос несколько связан с моим предыдущим вопросом . Трюк использования $_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