这个问题与我的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
答案 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