nginx 配置 php 的时候, 下面这 try_files 有什么区别?

如下配置:

server {
  ...
  location / {
  # 重新向所有非真实存在的请求到index.php
    # try_files $uri $uri/ /index.php$args;
    # try_files $uri $uri/ /index.php?/$uri;
    # try_files $uri $uri/ /index.php?$query_string;
    # try_files $uri /index.php$is_args$args;
    try_files $uri $uri/ /index.php?$args;
  }
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}
1) try_files $uri $uri/ /index.php$args;
2) try_files $uri $uri/ /index.php?/$uri;
3) try_files $uri $uri/ /index.php?$query_string;
4) try_files $uri $uri/ /index.php?$args;
5) try_files $uri /index.php$is_args$args;

我已经测试过, 1 和 4,比如,

我的根目录 index.php 文件

<?php
var_dump($_GET);

配置 1 的话,访问: http://localhost:8081/hello/w...

$_GET 打印为空

array (size=0)
  empty

配置 4 的话

$_GET 打印

array (size=2)
  'foo' => string 'bar' (length=3)
  'big' => string 'foot' (length=4)

老实说不懂这些配置是什么意思,都是自己在一个个测的,还有在 nginx 配置中,如
$uri,$args,$query_string 这些看起来像变量的东西是怎么突然出现在 nginx 的配置中的?


1) try_files $uri $uri/ /index.php$args;
2) try_files $uri $uri/ /index.php?/$uri;
3) try_files $uri $uri/ /index.php?$query_string;
4) try_files $uri $uri/ /index.php?$args;
5) try_files $uri /index.php$is_args$args;

这几个它们有什么区别?

阅读 3.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题