- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为我的本地开发站点使用 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;
}
block
与 lock
匹配。然后它转到您为 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/
我刚刚安装了 WAMP,我可以访问本地主机并获取 phpinfo() 输出。 但是,虽然我可以看到 _SERVER['REQUEST_METHOD'] 设置为 GET,但我正在尝试使用以下 PHP:
我的代码中目前有 strtoupper($_SERVER['REQUEST_METHOD'])。 但是 strtoupper 调用有必要吗? $_SERVER['REQUEST_METHOD'] 是否
在我正在开发的 PHP 项目中,我有几个可以是 POST 或 GET 的请求。目前,我使用 $_SERVER[REQUEST_METHOD] 值来确定要使用哪个请求数组。我知道 $_REQUEST 值
所以,一段时间以来,我一直在使用以下方法检查我的帖子数据是否已设置。 if( ! empty( $_POST ) ) { } 但最近我看到很多帖子说上面是“hack”而下面是正确的“更好”方式。 if
我有一个包含 2 个表单的页面。这是为了使用 PHP/PDO 插入数据库。我面临的问题是,即使我没有按下提交按钮,插入页面上的 IF 语句也会产生错误。已尝试使用 $_POST isset/!==0
一直在对此进行一些挖掘,但是找不到信息 我正在尝试检查表单是否已提交以及它是 GET 还是 POST。所以基本上我使用: if($_SERVER['REQUEST_METHOD'] == 'GET')
我正在为我的本地开发站点使用 nginx + php5-fpm。在构建表单时,我遇到了一个非常奇怪的问题。 似乎 $_SERVER['REQUEST_METHOD'] 在我发布时有时会被误报为“GET
在实际使用 $_SERVER['REQUEST_METHOD'] 之前,我是否必须检查 $_SERVER 变量是否具有键 REQUEST_METHOD? 也就是说,总是检查数组变量中是否存在某个键是否
这个问题在这里已经有了答案: $_POST vs. $_SERVER['REQUEST_METHOD'] == 'POST' (11 个答案) 关闭 8 年前。 我在看一个关于PHP表单提交的视频,
我在这里搜索了大约十几个与以下内容相关的答案: if ($_SERVER['REQUEST_METHOD'] == 'POST') { } 但我仍然没有找到原因的答案。为什么。 如果我们已经设置了,为
为什么此行在我的实时服务器中返回 null? filter_input(INPUT_SERVER, 'REQUEST_METHOD'); 实时服务器是php5.5.9 我错过了什么吗? 我以为是用来替
我有以下代码,每当我尝试插入数据时,$content 都没有被插入,问题可能出在哪里?我正在使用功能测试输入来解决安全相关问题。 Article Published"; echo" View it N
对 php 有点陌生,阅读了一些人的代码,看到了这个: if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['.
我在 login.php 中得到了这段代码: login.php Log in: Username: Password: 我是一个 php 初学者,我正在尝试将数据发布
我遇到了最奇怪的问题,我不知道如何解决。我的表格第一行是: 但是当我回显 $_SERVER['REQUEST_METHOD'] 时,它会回显“GET”。我正在使用 CodeIgniter,所以我不知
我对此有点困惑。我希望这是我错过的非常明显的事情!我有一个非常简单的表格: 注意此页面位于 /page 并在以下 HTML 之后回显: 在 /page 上,我在文件的最顶部有这个: <
有人称我的 Snipplr 提交之一“垃圾”,因为我使用 if ($_SERVER['REQUEST_METHOD'] == 'POST') 而不是 if ($_POST) 检查请求方法对我来说似乎更
我的问题与this one 非常相似但我不明白为什么我的请求会是跨域的。这是我用 Firebug 得到的结果: 所有域都一样,我不明白为什么 Firefox 和 IE 有这种行为。 你可以测试here
" method="POST"> Admin Login 我在php上制作了method="POST"表单 if ($_SERVER['REQUEST_ME
我正在使用 C 处理一个 CGI 文件,该文件仅在请求方法为 POST 时才执行操作。 int main(void) { char *method_str = getenv("REQUE
我是一名优秀的程序员,十分优秀!