为什么 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 Status Code 404字面意思是,这个请求是无效的,因为找不到资源。

来自Wikipedia

The requested resource could not be found but may be available again in the future. Subsequent requests by the client are permissible.

什么是 Post?来自 Wikipedia

Per RFC 7231, the POST method should be used for any context in which a request is non-idempotent: that is, it causes a change in server state each time it is performed, such as submitting a comment to a blog post or voting in an online poll.[...]

我无法确认或否认 IIS404 上没有 Post,因为我从未尝试过。但是支持就没有意义了


对我来说,听起来您想要重写一些请求。为此,您需要 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'];

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

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