在 PHP Linux Azure Web App 中,$_SERVER['REQUEST_METHOD'] 始终设置为 GET,即使通过 Postman 发出 POST、PATCH、DELETE



我有一个托管在Linux Azure应用程序服务上的PHP应用程序,它有一个RESTful API组件。

在端点的代码中,我有以下代码来确定发出了什么类型的请求:

if ( $_SERVER['REQUEST_METHOD'] == 'GET' ) {  ...
}
else if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { ...
}
else if ( $_SERVER['REQUEST_METHOD'] == 'PATCH' ) { ...
}
else if ( $_SERVER['REQUEST_METHOD'] == 'DELETE' ) { ...
else { ...
}

当PHP应用程序托管在本地,并且API使用Postman进行测试时,这一切都很好。然而,当应用程序托管在Azure上时,无论Postman中的实际请求方法设置为什么,$_SERVER['REQUEST_METHOD']变量始终返回'GET'

我对它进行了一些研究,发现了一个Stack Overflow的答案,它说默认情况下$_SERVER['REQUEST_METHOD']变量总是设置为'GET':https://stackoverflow.com/a/34984252/14461562.

但是,我一直找不到关于如何使$_SERVER['REQUEST_METHOD']变量正常工作的更多信息。

有人有这个问题的经验或知道如何解决它吗?

也许您没有重定向规则或使用了错误的规则。

添加以下代码的.htaccess文件,可能对您有用。

RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC]
RewriteRule ^ %1 [R,L]

最新更新