为什么POST数组在404或其他自定义IIS错误页面中为空?

时间:2015-04-05 21:47:25

标签: php iis error-handling iis-7.5

我已经IIS > MySite > Error Pages设置了自定义php 404错误页面,但 $ _ POST 数组始终为空。这是正常的吗?如何告诉IIS将POST数据传递给PHP错误页面?

IIS 7.5

1 个答案:

答案 0 :(得分:1)

免责声明:此答案在行间阅读中给出。


正如我在评论中所述,如果请求无效,则没有理由处理某些用户输入。 HTTP状态代码404 明确表示此请求无效,因为无法找到该资源。

来自Wikipedia

  

找不到请求的资源,但可能会再次提供   在将来。客户的后续请求是允许的。

什么是帖子?来自Wikipedia

  

根据RFC 7231,POST方法应该用于其中的任何上下文   请求是非幂等的:即它会导致服务器发生更改   每次执行时都说明,例如向a。提交评论   博客在线投票或投票。[...]

我无法确认或否认,如果确实如此,IIS没有404发帖,因为我从未尝试过这个。但支持是没有意义的。


对我而言听起来,你想重写一些请求。为此,您需要Rewrite Module

然后你就可以web.config这样。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="RequestString">
                    <match url="^(.*)$" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php?requestString={R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

index.php上,您可以:

echo $_GET['requestString'];

如果您拨打网址http://yourwebsite.com/foo/bar,则会在index.php字符串foo/bar中回显。

现在,您可以拆分字符串,使用它做出一些决定,并对不同的值执行不同的操作。