【问题标题】:How to get `$_POST` query when 404 redirected through .htaccess?当 404 通过 .htaccess 重定向时如何获取“$_POST”查询?
【发布时间】:2012-05-10 22:22:06
【问题描述】:

这个问题和我的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'] 不起作用。

当我使用以下 .htaccess 设置将$_POST 变量重定向到index.php 时,如何获取它

错误文档 404 /index.php

【问题讨论】:

  • 这不是一个“技巧”,它只是一个糟糕的解决方案。为什么不使用mod_rewrite? ps:不,404重定向后你已经丢失了post数据,你无法获取它
  • 不确定,但我认为您在重定向时会丢失所有 POST 数据。你需要它做什么?也许有一些不同的方式
  • 请注意,没有404 redirect 这样的东西。 4xx响应码表示客户端错误(404表示客户端请求的资源在服务器上不存在),3xx码用于重定向。如果你想强制客户端重新提交相同的 POST 请求到一个新的 URI,你应该使用 307 状态码。但我怀疑你在这里实际需要使用的是RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d 来将不存在的文件的请求重写为特定脚本。
  • 当用户请求一个不存在的页面时,我想查看 index.php 的内容和动态内容,具体取决于 post 变量(不更改 url 地址栏中的 url)
  • 除非用户已提交表单,否则不应发送发布请求,并且您网站上的所有表单都应指向存在的资源。 mod_rewrite 将是你想要的。

标签: php .htaccess


【解决方案1】:

在这里查看答案:http://www.brainonfire.net/blog/apache-pitfall-errordocument-post/

我用这个解决了我的问题。


或将其放入您的 .htaccess 文件中:

重写引擎开启 RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 重写规则。 /yourErrorDocument.php [L]

【讨论】:

  • 我没有工作 - $_SERVER['REQUEST_METHOD'] 和 $_POST 都丢失了(php 5.4.12)
【解决方案2】:

使用以下指令:

ErrorDocument 404 /index.php

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

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

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

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

所以简而言之,你不能使用ErrorDocument directive 对 HTTP POST 请求进行 URL 重写。

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

【讨论】:

【解决方案3】:

使用FallbackResource 指令而不是Apache 的ErrorDocument 指令:它成功了 FallbackResource on Apache website

例子:

FallbackResource /404.php

【讨论】:

  • 这是我所需要的解决方案。谢谢你提供它。对于实施此解决方案的人来说,一个重要的注意事项是:您必须按名称指定实际文件。例如,在我的项目中,我之前将“ErrorDocument 403 /router/”作为我的指令,而没有在末尾指定“index.php”。当我尝试“FallbackResource /router/”时,它失败了,直到我将其更改为“FallbackResource /router/index.php”。
  • 另请参阅这篇文章,它应该可以为您节省一个小时的时间来尝试调试为什么它不适用于“/”的根端点:serverfault.com/questions/512735/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多