PHP $_GET $_REQUEST 为空

刚才遇到一个很奇怪的问题——$_REQUEST无法获取GET参数,一开始以为是PHP配置的问题,后来打印$_GET也是空,所以猜想不是PHP的问题,也许是Nginx的问题。

一、如果只是$_REQUEST为空的解决办法:

打开php.ini,配置 request_order如下

request_order = "GP"

Note:这项配置是让PHP支持$_REQUEST 获取$_POST & $_GET参数。

二、如果$_GET $REQUEST都为空

Nginx有个try_files 配置选项,关于try_files配置解释如下:

语法:try_files file ... uri 或 try_files file ... = code
默认值:无
作用域:server location

其作用是按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。

需要注意的是,只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现内部500错误。命名的location也可以使用在最后一个参数中。与rewrite指令不同,如果回退URI不是命名的location那么$args不会自动保留,如果你想保留$args,则必须明确声明。

我当时的配置是:

try_files $uri $uri/ /index.php$uri&$args;

这样在重定向之后get参数就不存在了,肯定获取不到数据了。
把配置改成下面这样就可以了:

try_files $uri $uri/ /index.php?q=$uri&$args;
or
try_files $uri $uri/ /index.php?$args;
JackSun

JackSun

I'm a coder.

You may also like...

1 Response

  1. 12 says:

    多谢博主,解决了困扰我一天的问题

Leave a Reply

Your email address will not be published.