gpt4 book ai didi

php - 为什么 REQUEST_METHOD 被误报为 "GET"?

转载 作者:可可西里 更新时间:2023-11-01 17:09:31 26 4
gpt4 key购买 nike

我正在为我的本地开发站点使用 nginx + php5-fpm。在构建表单时,我遇到了一个非常奇怪的问题。

似乎 $_SERVER['REQUEST_METHOD'] 在我发布时有时会被误报为“GET”。不过它变得更奇怪了:这似乎只有在 URL 包含神奇的词“block”时才会发生。

例如,如果我运行以下请求:

POST /block HTTP/1.1
Host: dev.bla.com
Content-Type: application/x-www-form-urlencoded
[...]

服务器错误地将此报告为 GET 请求,$_SERVER 上的 var_dump 将向您显示(var_dump 是执行的第一段也是最后一段代码,没有任何影响):

array (size=37)
'USER' => string 'www-data' (length=8)
'HOME' => string '/var/www' (length=8)
'FCGI_ROLE' => string 'RESPONDER' (length=9)
'QUERY_STRING' => string '' (length=0)
'REQUEST_METHOD' => string 'GET' (length=3)
'CONTENT_TYPE' => string 'application/x-www-form-urlencoded' (length=33)
[....]

甚至 $_POST 超全局变量也是空的。任何不包含魔术词的 URL 都会被正确报告。我已经使用 Postman 和 Google Chrome 验证了以上内容。

作为引用,这是我的 nginx 配置文件:

server {
## Basic configuration
listen 80;
root /var/projects/bla;
index index.php;
server_name dev.bla.com;

## Restrict all directory listings
autoindex off;

## Set the error page to index.php. As index.php applies routing
## (based on REQUEST_URI), our own error page will show up.
error_page 404 = /index.php;

## Rewrite everything to index.php, but maintain query string
location / {
try_files $uri $uri/ /index.php$is_args$args;
}

## Block folders (PHP source code etc)
location ~ /(code|controllers|models|vendor|views) {
deny all;
return 404;
}

## Block file extensions (configuration, composer, READMEs, etc)
location ~ (\.xml|sql|phar|json|lock|conf|cfg|gitignore|md) {
deny all;
return 404;
}

## Proxy requests to php-fpm listening on a Unix socket
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}

我的 PHP 版本是 5.5.14。

我该如何解决这个问题?

最佳答案

这条规则:

location ~ (\.xml|sql|phar|json|lock|conf|cfg|gitignore|md) {
deny all;
return 404;
}

blocklock 匹配。然后它转到您为 404 错误设置的 index.php。

制作它:

location ~ \.(xml|sql|phar|json|lock|conf|cfg|gitignore|md)$ {
deny all;
return 404;
}

另一条规则也可能带来麻烦。

关于php - 为什么 REQUEST_METHOD 被误报为 "GET"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com