如何在安装的lnmp一键环境包(nginx)启用pathinfo URL模式

我们在安装lnmp一键安装的时候,一般都没有开启访问pathinfo模式

这种模式在比较多的框架中用到,比如国人的ThinkPHP,还比如C写的Yaf也用到,不支持就比较可惜了。

pathinfo的原理就是将index.php/xxxx/xxx类似的网址当做php来执行,并且需要将xxx/xxx写入到$_SERVER[‘PATH_INFO’]中


这个是lnmp.org(我装的就是这个,所以我以这个为例子)开出来的虚拟机的配置中的一段(vhost/***.conf),修改nginx配置文件也是这样修改


location ~ .*\.(php|php5)?$
	{
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi.sock;
		fastcgi_index index.php;
		include fcgi.conf;
	}


大家明显看到,location中的正则中,写了一个$,悲剧了,表示就此结束(?表示前面的php只匹配一次,这个只是随便提提)

最终,应该如此处理(location哪里也修改了,因为我没有用到php5处理):


if (!-e $request_filename)
		{
			rewrite ^\/(.*)$ /index.php/$1 last;
			break;
		}
location ~ \.php
	{
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi.sock;
		fastcgi_index index.php;
		include fcgi.conf;
		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;
	}

后面的部分处理我是参考的网络上搜索到的文档,带注释版告诉大家

location ~ \.php
	{
		try_files $uri =404;
		fastcgi_pass  unix:/tmp/php-cgi.sock;
		fastcgi_index index.php;
		include fcgi.conf;
		set $path_info "";#初始化一个变量
		set $real_script_name $fastcgi_script_name;#初始化一个变量,并且获取到一个原始赋值
		if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {#检测如果.php后面还存在/开始参数,将参数处理
			set $real_script_name $1;#将第一个正则子串匹配到的赋值
			set $path_info $2;#将第二个正则子串匹配到的赋值
		}
		fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;#修改SCRIPT_FILENAME值
		fastcgi_param SCRIPT_NAME $real_script_name;#修改SCRIPT_NAME值
		fastcgi_param PATH_INFO $path_info;#修改PATH_INFO值
		#上述三个赋值都是replace into的模式,这些值都是写在fcgi.conf中
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值