首页 > 程序开发 > 综合编程 > 其他综合 >

Mac安装的Nginx实现PATH_INFO并隐藏index.php文件

2016-12-05

一般我们的URL都是这样的http: rlfr cc index php?class=""&method="",但是好多都会觉得URL不够美观 使用PATH_INFO的话可以看起来美观一些可以变成下面这样。

一般我们的URL都是这样的

http://rlfr.cc/index.php?class=""&method=""

但是好多都会觉得URL不够美观
使用PATH_INFO的话可以看起来美观一些可以变成下面这样

http://rlfr.cc/index.php/"class1"/"method1"

甚至可以将index.php也可以隐藏掉
成为下面的URL

http://rlfr.cc/"class1"/"method1"

关于PATH_INFO大家可以上网搜一下是怎么回事,然后就容易理解了
关于实现PATH_INFO我们需要做一下修改,修改的文件就是我们的nginx.conf
关于nginx.conf可以参考上一篇帖子《Mac安装Nginx、PHP配置》
修改内容:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#定义变量 $path_info ,用于存放pathinfo信息
set $path_info "";
#定义变量 $real_script_name,用于存放真实地址
set $real_script_name $fastcgi_script_name;
#如果地址与引号内的正则表达式匹配
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
#将文件地址赋值给变量 $real_script_name
set $real_script_name $1;
#将文件地址后的参数赋值给变量 $path_info
set $path_info $2;
}
#配置fastcgi的一些参数
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}

下面是参照帖子内容
--------------------参考内容-------------------
首先,什么是pathinfo模式呢?
  pathinfo是伪静态的一种,我们先解释一下伪静态的概念,伪静态页面是静态URL与动态URL互通的一个桥梁,它是指动态网址通过URL重写的手段去掉其动态参数,使URL静态化,但在实际的网页目录中并没有重写URL。简单来说,伪静态URL就是通过服务器转换伪装文件名或地址,使该页面类似于静态页面,但服务器上没有独立存在的文件,其本质还是动态页面。
  例如:一个动态网址http://www.xxx.com/index.php?m=topic&a=detail&tid=82 转为 伪静态模式后为http://www.xxx.com/index.php/topic/detail/tid/82.html。
  apache服务器本身是支持pathinfo的,通过简单修改几项配置即可。当配置支持pathinfo后,在php应用程序中,通过_SERVER['PATH_INFO']变量获取pathinfo值为/topic/detail/tid/82.html。 我们就可以很容易通过php逻辑代码来解析出controller文件、action方法、以及剩余的动态参数,进而就可以返回正确的网页响应。
  但是我们要说的nginx服务器默认是不支持pathinfo模式访问。实质上就是nginx不会去设置环境变量PATH_INFO 的值,导致php应用程序不能通过_SERVER['PAHT_INFO']来获取path_info, 也就不能解析出对应的动态参数。
  好了,终于到本文的正题了,nginx支持pathinfo的配置如下:
  1. 找到ngingx的配置文件nginx.conf
  在server里的location项,
  修改前为:

 location ~ \.php$ { 注:去掉本行的$ 字符
  root html;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
  注:下面加上一些配置语句
  }
  修改后为:
  location ~ \.php {
  root html;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
  #定义变量 $path_info ,用于存放pathinfo信息
  set $path_info "";
  #定义变量 $real_script_name,用于存放真实地址
  set $real_script_name $fastcgi_script_name;
  #如果地址与引号内的正则表达式匹配
  if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
  #将文件地址赋值给变量 $real_script_name
  set $real_script_name $1;
  #将文件地址后的参数赋值给变量 $path_info
  set $path_info $2;
  }
  #配置fastcgi的一些参数
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
  }

  2.重启nginx和phpcgi
  其他参考:
  thinkphp 框架比较好了支持了pathinfo模式访问,可以去深入了解一下它是怎么支持pathinfo格式的。
  www.xxx.com就是基于thinkphp框架,而且全站使用的都是pathinfo访问。
-------------参考内容----------
上面的配置完了以后我们会达到第二种效果具有了PATH_INFO
如果需要隐藏掉index.php的话还要做一下配置
#配置Nginx.conf在你的虚拟主机下添加:

location / {
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php/$1 last;
}
}

#如果你的项目入口文件在一个子目录内,则:

location /目录/ {
if (!-e $request_filename){
rewrite ^/目录/(.*)$ /目录/index.php/$1 last;
}
}

这样以后我们就可以实现最终的URL访问方式了

相关文章
最新文章
热点推荐