一:PATH_INFO 模式是什么? PATH_INFO 模式是伪静态的一种。...我们可以使用PATH_INFO来代替Rewrite来实现伪静态页面, 另外不少PHP框架也使用PATH_INFO来作为路由载体 伪静态页面是静态URL与动态URL互通的一个桥梁,它是指动态网址通过URL...PATH_INFO是服务器状态中的一个参数,PHP通过$_SERVER[‘PATH_INFO’]可以查看内容 二:如何解析 Apache 在Apache中, 当不加配置的时候, 对于PHP脚本, Accept...##这样PHP中$_SERVER['PATH_INFO']才会存在值 fastcgi_param PATH_INFO $fastcgi_path_info;...php var_dump($_SERVER['PATH_INFO']); //string(17) "/Home/index/chris" 可以看到,我们获取到了入口文件后的路径信息。
值来解析的,甚至传参也可以带在path_info中 排查path_info的值 一路追踪源码,在thinkphp\library\think\Request.php 路径中,找到以下代码 /**...$pathinfo = $this->server('PATH_INFO'); } // 分析PATHINFO信息 if (!...的第一门关)打印$_SERVER['PATH_INFO'] 打印出来的值大概为admin/index.php 然后在后续解析中,又会把.替换成/ 也就是admin/index/php 对应我们报错的app...\admin\controller\index\Php类 分析path_info来源 我们知道,$_SERVER超全局变量是在php中自动维护的,所以它的来源肯定来自以下两个方面之一 php底层 web...服务器 经过找一些资料,我得知了该变量的值是来自web服务器,也就是我使用的nginx 宝塔安装的nginx,会自动维护很多常用配置,比如不同版本的php配置、path_info配置等等(有些自己编译安装的
PHP的很多框架里面都是通过获取$_SERVER['PATH_INFO']处理路由 , 这个变量是通过nginx传递过来的 , 我们在nginx中经常见到下面两句 fastcgi_split_path_info...^(.+\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; 这两句是什么意思呢?...nginx默认获取不到PATH_INFO的值,得通过fastcgi_split_path_info指定定义的正则表达式来获取值 ^(.+\.php)(/.*)$; 这个正则表达是有两个小括号 , 也就是有两个捕获...如果访问 /index.php/test ,第二个捕获的是/test $fastcgi_path_info就是/test,因此就会把/test传递给php的$_SERVER['PATH_INFO']
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO
当配置支持pathinfo后,在php应用程序中,通过_SERVER['PATH_INFO']变量获取pathinfo值为/topic/detail/tid/82.html。...实质上就是nginx不会去设置环境变量PATH_INFO 的值,导致php应用程序不能通过_SERVER['PAHT_INFO']来获取path_info, 也就不能解析出对应的动态参数。...,用于存放pathinfo信息 set $path_info ""; #定义变量 $real_script_name,用于存放真实地址...set $path_info $2; } #配置fastcgi的一些参数 fastcgi_param...SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info; } 2.重启nginx和phpcgi
当配置支持pathinfo后,在php应用程序中,通过_SERVER['PATH_INFO']变量获取pathinfo值为/topic/detail/tid/82.html。...实质上就是nginx不会去设置环境变量PATH_INFO 的值,导致php应用程序不能通过_SERVER['PAHT_INFO']来获取path_info, 也就不能解析出对应的动态参数。 ... ,用于存放pathinfo信息 set $path_info ""; #定义变量 $real_script_name,用于存放真实地址 set $real_script_name... set $path_info $2; } #配置fastcgi的一些参数 fastcgi_param SCRIPT_NAME $real_script_name...; fastcgi_param PATH_INFO $path_info; } 二、重启nginx和phpcgi
php if(array_key_exists('PATH_INFO', $_SERVER) && $_SERVER['PATH_INFO'] !...== '/') {//存在这个系统变量的话 $pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO'])))...方法"; print_r($params)." "; /* $pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO...']))); 从 $_SERVER 数组中取出当前请求的 PATH_INFO 部分,使用 explode() 函数按照斜杠进行分割,并将分割后的结果存储在一个数组中。
= $server['path_info']; $request_uri = $server['request_uri']; if ($path_info =...= '/') { $path_info = explode('/',$path_info); if (!...empty($path_info[1])) ?...$path_info[1] : $controller; $method = (isset($path_info[2]) && !...empty($path_info[2])) ?
PHP中的全局变量$_SERVER['PATH_INFO']是一个很有用的参数,众多的CMS系统在美化自己的URL的时候,都用到了这个参数。...c=index&m=search 我们可以得到 $_SERVER['PATH_INFO'] = ‘/foo/bar.html’,而此时 $_SERVER['QUERY_STRING'] = 'c=index...下面是一段解析PATH_INFO的非常简单的代码: <?php if( !...isset( $_SERVER['PATH_INFO'] ) ){ $pathinfo = 'default'; }else{ $pathinfo = explode('/', $_SERVER...['PATH_INFO']); } if( is_array($pathinfo) AND !
2.使用nginx正则解析,手动用if命令将访问路径解析,然后作为PATH_INFO传递给php页面。...Nginx默认获取不到PATH_INFO的值,得通过fastcgi_split_path_info指定定义的正则表达式来给$fastcgi_path_info赋值。...\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param...document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO...$path_info; }
= result.group(1) # 当用户请求/ 表示首页 返回一个首页资源 if path_info == '/': path_info =...= result.group(1) # 当用户请求/ 表示首页 返回一个首页资源 if path_info == '/': path_info =...= result.group(1) # 当用户请求/ 表示首页 返回一个首页资源 if path_info == '/': path_info = '/index.html...= result.group(1) # 当用户请求/ 表示首页 返回一个首页资源 if path_info == '/': path_info =...= result.group(1) # 当用户请求/ 表示首页 返回一个首页资源 if path_info == '/': path_info =
这个块匹配的正则需要改为 location ~ \.php($|/) ,这是正则相关知识自行查阅 location ~ \.php($|/) { set $script $uri; set $path_info...""; if ($uri ~ "^(.+\.php)(/.+)") { set $script $1; set $path_info $2; }...index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO...$path_info; fastcgi_param SCRIPT_NAME $script; include fastcgi_params; } 看到root设置你知道这个是windows...输出显示pathinfo信息被附加到好多个变量里面,有点乱,其实主要参考是request_uri和path_info,去别在于前者带有queryString参数,后者没有 ["DOCUMENT_URI"
#加载Nginx默认"服务器环境变量"配置 include fastcgi.conf; #设置PATH_INFO...fastcgi_script_name ~ "^(.+\.php)(/.+)$") { set $fastcgi_script_name2 $1; set $path_info...$2; } fastcgi_param PATH_INFO $path_info; fastcgi_param SCRIPT_FILENAME...fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #设置PATH_INFO...所以必须在加载fastcgi.conf之前设置 fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param PATH_INFO
public static function commandLine(){ if(php_sapi_name()=="cli"){ $_SERVER['PATH_INFO...foreach ($_SERVER['argv'] as $k=>$v) { if($k==0) continue; $_SERVER['PATH_INFO...empty($rules)){ $pathInfo=ltrim($_SERVER['PATH_INFO'],"/"); foreach ($rules as...pathInfo)){ $res=preg_replace($reg,$v,$pathInfo); $_SERVER['PATH_INFO...'])){ $pathinfo=array_filter(explode("/", $_SERVER['PATH_INFO'])); for($i=1;$
typedef struct _PATH_INFO { HANDLE hPPid; // 父进程 PID HANDLE hPid;.../ 子进程 PID ULONG PathLength; // 子进程路径长度 TCHAR Path[1]; // 用于存储子进程路径 } PATH_INFO...#include "stdafx.h" // 一个用于传递数据的结构体 typedef struct _PATH_INFO { HANDLE hPPid; //...那为什么 sizeof(PATH_INFO) 会比我们自己计算的长度多出来 4 个字节呢?...看如下图描述: 当我们传递结构体名 PATH_INFO 和结构体成员 Path 给该宏以后,它会帮我们计算出这个成员在结构体中的起始位置,换个角度说就是计算出了这个成员前的所有成员的大小!
= result.group(1) print("用户请求信息%s" % str(path_info)) # 设置请求域名默认跳转首页 if path_info == "/"...: # 指定首页地址 path_info = "/index.html" # 响应头 response_header = "Server: PWS1.0.../html" + path_info, "rb") as file: file_data = file.read() except Exception as e:...= result.group(1) print("用户请求信息%s" % str(path_info)) # 设置请求域名默认跳转首页 if path_info.../html" + path_info, "rb") as file: file_data = file.read() except Exception as
$_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']; $path_info = isset($_SERVER['PATH_INFO']) ?...$_SERVER['PATH_INFO'] : ''; $relate_url = isset($_SERVER['REQUEST_URI']) ?...$_SERVER['QUERY_STRING'] : $path_info); return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ?
续上一篇《让nginx支持pathinfo》 原文的配置在我本机(Win,Nginx1.2.4)还算可以,但是有一个bug,就是如果url里面包含trailing slash(最后的斜杠/)的话,PATH_INFO...捕捉到的值有误,为ATH_INFO,同时$_SERVER数组里面多了一个键名为ORIG_PATH_INFO的元素其值为我们期望的path_info,非常怪异,一开始以为是$path_info变量未定义的问题...折腾了很久之后还是有各种问题,其实很多PHP框架(如Yii、CI、ThinkPHP)、流行的应用系统(Wordpress、Joomla)等都支持另外一种兼容模式的pathinfo,就是通过其他方法获取path_info...既然是从$request_uri里面来的,那么直接从$_SERVER[‘REQUEST_URI’]里面提取path_info好了,下面是服务器上面的配置。...U).+.php)(.*)$; include fcgi.conf; fastcgi_param PATH_INFO $fastcgi_path_info;
因为LNMP不像LAMP,且早期Nginx不支持path_info,导致网上有大量旧版本的Nginx教程干扰视线。...通过分割,FastCGI得到的结果是: SCRIPT_FILENAME:’/path/to/php/show.php’ PATH_INFO: ‘/article/0001’ Nginx在0.7.31以前是没有...fastcgi_split_path_info这个指令的,而0.7.x这个版本一直存活了好多年,后面才高歌猛进,导致网上存在大量旧版本通过正则自己设置PATH_INFO的方法。...如果使用本文中的传递PATH_INFO方式,且隐藏index.php,则ThinkPHP的URL_MODE需要改为2。...如果使用本文中的传递PATH_INFO方式,但不隐藏index.php,则ThinkPHP的URL_MODE改为1。
领取专属 10元无门槛券
手把手带您无忧上云