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


Why is POST array empty in 404 or other custom IIS error page?

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

IIS 7.5

免责声明:这个答案是在字里行间给出的。


正如我在评论中所说,如果请求无效,就没有理由处理一些用户输入HTTP状态代码404字面意思是,此请求无效,因为找不到资源。

来自维基百科

找不到请求的资源,但可能再次可用未来客户的后续请求是允许的。

什么是邮政?来自维基百科

根据RFC 7231,POST方法应该用于任何上下文,其中请求是非幂等的:也就是说,它会导致服务器发生更改每次执行时的状态,例如向博客文章或在线投票。[…]

如果这是真的,我不能确认或否认IIS404上没有Post,因为我从未尝试过。但支持是没有意义的。


对我来说,这听起来像是,你想重写一些请求。为此,您需要重写模块。

然后你就可以有一个像这样的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'];

如果您调用url http://yourwebsite.com/foo/bar,您将在index.php中回显字符串foo/bar

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