xuanxi 发表于 2018-11-10 08:05:08

配置nginx支持pathinfo功能

  nginx模式不支持pathinfo模式,类似info.php/hello形式的url会被提示找不到页面。下面的通过正则找出实际文件路径和pathinfo部分的方法,让nginx支持pathinfo。
  location ~ \.php$ {
  root         html;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_indexindex.php;
  ##通过设置模拟出pathinfo
  set $path_info “”;
  set $real_script_name $fastcgi_script_name;
  if ($fastcgi_script_name ~ “^(.+?\.php)(/.+)$”) {
  set $real_script_name $1;
  set $path_info $2;
  }
  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
  include      fastcgi_params;
  }
  要点:
  1.~ \.php 后面不能有$以便能匹配所有 *.php/* 形式的url
  2. 通过设置更改 SCRIPT_FILENAME
  我在实际使用张将这段代码融合到了fastcgi_params中。下面是我的nginx配置文件示例:
  配置虚拟主机部分,支持pathinfo的nginx代码如下:
  ## 在nginx.conf的server部分:
  server {
  listen       8080;
  server_namelocalhost;
  location ~ \.php {
  include      fastcgi.conf;
  }
  }
  ##要点:\.php 后面没有$,以便匹配所有 *.php/* 形式
  ##重点代码见 fastcgi.conf 开头部分
  fastcgi.conf 代码如下:
  fastcgi_pass   127.0.0.1:9000;
  ##fastcgi_indexindex.php;
  set $path_info "";
  set $real_script_name $fastcgi_script_name;
  if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
  set $real_script_name $1;
  set $path_info $2;
  }
  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
  ## 以上是支持pathinfo的重点部分
  fastcgi_paramGATEWAY_INTERFACECGI/1.1;
  fastcgi_paramSERVER_SOFTWARE    nginx;
  fastcgi_paramQUERY_STRING       $query_string;
  fastcgi_paramREQUEST_METHOD   $request_method;
  fastcgi_paramCONTENT_TYPE       $content_type;
  fastcgi_paramCONTENT_LENGTH   $content_length;
  #fastcgi_paramSCRIPT_FILENAME    $document_root$fastcgi_script_name;
  #fastcgi_paramSCRIPT_NAME      $fastcgi_script_name; 这两行是需要注释掉的。请注意
  fastcgi_paramREQUEST_URI      $request_uri;
  fastcgi_paramDOCUMENT_URI       $document_uri;
  fastcgi_paramDOCUMENT_ROOT      $document_root;
  fastcgi_paramSERVER_PROTOCOL    $server_protocol;
  fastcgi_paramREMOTE_ADDR      $remote_addr;
  fastcgi_paramREMOTE_PORT      $remote_port;
  fastcgi_paramSERVER_ADDR      $server_addr;
  fastcgi_paramSERVER_PORT      $server_port;
  fastcgi_paramSERVER_NAME      $server_name;
  # PHP only, required if PHP was built with --enable-force-cgi-redirect
  #fastcgi_paramREDIRECT_STATUS    200;

页: [1]
查看完整版本: 配置nginx支持pathinfo功能