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