pathinfo,一种伪静态的用法,路由模式,即路径:http://blog.csdn.net/bjash/article/details/8466789 而普通模式则是:http://blog.csdn.net/控制器/方法?a=details&m=8466789,就是根据路径内容转成数组,再用数组分析给整个php框架,做伪静态路径也比较常见
1.让 Apache 支持 PathInfo
配置的 Apache 版本 : 2.2.13
在配置文件中加入
<Files *.php>
AcceptPathInfo On
</Files>
这样 Apache 就可以支持针对 php 文件的 PathInfo 了.
2、pathinfo 模式 需要 php.ini 开启下面这个参数
cgi.fix_pathinfo=1
path_info模式:http://www.xxx.com/index.php/模块/方法
而且nginx 环境下,如果 uri 含中文,PATH_INFO就被截断了,会新产生一个 ORIG_PATH_INFO,才是正确的,
3.让 Nginx 支持 PathInfo
在配置文件里添加
location ~ \.php
{
fastcgi_pass ;
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 /var/html/$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
include conf/fcgi.conf;
}
thinkPHP中pathinfo四种访问模式
0:普通模式。http://bbs.aaa.net/index.php?m=user&a=dm代表模块a代表方法1:叫pathinfo模式,它下面还分两种模式。默认访问模式是http://bbs.aaa.net/index.php/user/index2:rewrite重写(伪静态)。可以自己写相关的rewrite规则,也可以使用系统为我们提供的rewrite规则。http://bbs.aaa.net/user/index。apache手册中有一块是URL重写规则,可以看一下。3:叫做兼容模式。它的路径访问http://bbs.aaa.net/index.php?s=/user/g 当服务器上不支持pathinfo模式的时候,但之前的路径访问模式上面,全都用的pathinfo模式,它会提示路径模式不正确。这时,为解决这种问题,可以用标号为3的兼容模式来处理,这些都是支持GET的,所以用兼容模式可以解决它。设置访问模式,要在conf.php文件内: ‘URL_MODEL’=> 0; 设置为2时,因为开启URL重写,不论是重写的还是被重写的,都能通过原有路径来进行访问。 如果要开启rewrite模式的话,1、要确认你的服务器已经开启了apache的rewrite模块。apache下的httpd.conf文件中的LoadModule rewrite..这一行的#去掉,然后重启服务器。2、在与主入口文件,项目入口文件同级的目录下面新建一个.htaccess文件。记事本用vi打开,再另存为.htaccess文件。或者是直接打开记事本,在另存为的文件名中写“.htaccess”一定要有引号。建好后可以直接把手册中的rewrite部分粘过来,就可以启用rewrite了,也就是可以直接使用http://bbs.aaa.net/user/index了,不用写index.php或admin.php这些入口文件了。 如果使用2 rewrite模式,会加大服务器的性能消耗。 ------- conf.php中设置 'PATHINFO_URL_MODEL'=>1普通模式http://.../index.php/m/user/a/index加上m和a,即使把m和a的位置换一下也不影响结果a/index/m/user 普通模式必须要在前面加上/a/模块/a/动作,并且顺序可以发生变化,如果要用GET传值 ,在这种PATHINFO模式下,要加斜线后面再加值,如:http:../index.php/m/user/a/index/username/zhangsan 2、智能模式,值为2 pathinfo默认就是智能模式,/index.php/user/index意思就是user模块下的index方法 这种方式下GET传值 :/username/张三 它的值传方法与普通模式传值一致 ----------- ‘URL_PATHINFO_DERP’='-'; 这个设置是把分隔符变为中橫线(-),默认是/ ------ 改定界符 'APP_DEBUG'=>'true'开启调试模式,一旦开启,它会模拟linux操作系统来帮我们识别大小写。并且开启之后方法名的大小写与,模板文件的大小写有关。但模拟出来的文件夹命名,不区分大小写。 --- 默认情况下每个方法下面的$this->display()是显示跟这个方法名相同的模板的,如果不想显示这个方法名的模板,而想显示另一个文件(同级)内容,直接写$this->display('anthor');就会用anthor.html,括号里不用写后缀名 跨模块显示(以下示例的$this->display均在Index模块下的index方法中) $this->display('模块名:模板名');如$this->display('user:index');就会显示user模块下的index文件 跨主题,也叫跨皮肤 在default建一个skin,在skin下建一个user文件夹,再在它下面建一个new.html $this->display('skin@user:new');那这样的话,再显示这个页面的时候会红色背景 (‘皮肤的目录名@找哪个目录的名称:模板的名称’); --- 全路径输出: 在主入口文件下,建一个Public目录,在它下建一个ss.html,在它下面再加一个背景颜色 $this->display('./Public/ss.html');再打开这个页面就是绿色背景 注:加载文件的位置全以主入口文件定位。即相对于index.php这个文件定位的。 ---- 还有种绝对路径,按你的磁盘来写('E:/AppServ/www/project/Public/ss.html');效果一样 --- $this->display('指定位置',‘编码’,‘文件的mimie类型’);比如需要输出xml文件,就可以写成$this->display('index','utf-8','text/xml');