转载:配置nginx支持pathinfo功能

本文介绍如何通过Nginx的正则重写规则来支持Pathinfo模式,包括虚拟主机配置文件及fcgi_pathinfo.conf文件的具体设置,并提供PHP程序中获取Pathinfo的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://linuxguest.blog.51cto.com/195664/694319

 

nginx模式不支持pathinfo模式,类似info.php/hello形式的url会被提示找不到页面。下面的通过正则找出实际文件路径和pathinfo部分的方法,让nginx支持pathinfo。

 

nginx虚拟主机配置文件:

server {
  listen       80;
  server_name  localhost;
  root         /data/site;

  # 要实现使用指定程序处理 /a/b/c 路径请求,需要将请求地址改写为 /index.php/a/b/c;
  # 如果请求路径是物理存在的则不进行改写,防止将 /index.php 请求也改写了;
  if ( !-e $request_filename ) {
    rewrite ^/(.*)$ /index.php/$1 break;
  }

  # ~ \.php 后面不能有$,以便能匹配所有 *.php/* 形式的url
  location ~  \.php {
    include       fcgi_pathinfo.conf;
    fastcgi_pass  127.0.0.1:9000;
  }
}

 

在 fcgi_pathinfo.conf 中更改 SCRIPT_FILENAME:

fastcgi_index  index.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_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

#fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
#fastcgi_param  SCRIPT_NAME       $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param  REDIRECT_STATUS    200;

 

在PHP程序中获取path_info:

// 获取 PATH_INFO
$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
preg_replace('/\.\./', '', $path_info);

$path_array = array();
if (preg_match_all('/([^\/]+)/', $path_info, $temp)) {
  $path_array = $temp[1];
}

 

 

转载于:https://www.cnblogs.com/edwardlost/archive/2013/03/22/2975987.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值