404通过.htaccess重定向时如何获取`$ _POST`查询?

时间:2012-05-01 11:12:00

标签: php .htaccess

这个问题与我的previous question有些关联。使用$_SERVER['REDIRECT_QUERY_STRING']的诀窍似乎只适用于$_GET变量。

好吧,我有一个index.php文件来处理所有404 redirects

如果用户请求的页面不存在,例如apple.php?item=23,那么使用$_SERVER['REDIRECT_QUERY_STRING']我可以获得$_GET变量item=23,但如果变量是$_GET不是$_POST而是$_SERVER['REDIRECT_QUERY_STRING'],那么$_POST不起作用。

使用以下.htaccess设置将index.php重定向到{{1}}时,如何获取{{1}}变量

  

ErrorDocument 404 /index.php

3 个答案:

答案 0 :(得分:7)

在此处查看答案: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]

答案 1 :(得分:5)

使用以下指令:

ErrorDocument 404 /index.php

apache webserver执行内部重定向到新位置。内部意味着,客户端(浏览器)不会更改其地址栏中的URL,因为该重定向不会传达给浏览器。

因为它是重定向,所以POST请求变成了GET请求。

您可以通过查看以下两个$_SERVER变量来看到这一点:

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

简而言之,您无法使用ErrorDocument directive对HTTP POST请求进行URL重写。

您需要使用mod_rewrite module或创建自己的apache处理程序。

答案 2 :(得分:4)

使用FallbackResource指令代替Apache的ErrorDocument指令:它可以解决问题 FallbackResource on Apache website

示例:

FallbackResource /404.php