thinkphp 3.2 的pathinfo模式与控制器的关系

pathinfo有四种模式:

0:普通模式 也就是传统的GET传参方式来指定当前访问的模块和操作,例如:

http://localhost/?m=home&c=user&a=login&var=value

  m参数表示模块,c参数表示控制器,a参数表示操作(当然这些参数都是可以配置的),后面的表示其他GET参数。

如果默认的变量设置和你的应用变量有冲突的话,你需要重新设置系统配置,例如改成下面的: 

‘VAR_MODULE‘            =>  ‘module‘,     // 默认模块获取变量
‘VAR_CONTROLLER‘ => ‘controller‘, // 默认控制器获取变量
‘VAR_ACTION‘ => ‘action‘, // 默认操作获取变量

上面的访问地址则变成:

http://localhost/?module=home&controller=user&action=login&var=value

1:pathinfo模式,它下面还分两种模式。默认访问模式是http://bbs.aaa.net/index.php/user/index

   PATHINFO模式是系统默认的模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。对应上面的URL模式,PATHINFO模式下面的URL访问地址是: http://localhost/index.php/home/user/login/var/value/    PATHINFO地址的前三个参数分别表示模块/控制器/操作。  

不过,PATHINFO模式下面,依然可以采用普通URL模式的参数方式,例如: http://localhost/index.php/home/user/login?var=value 依然是有效的

PATHINFO模式下面,URL是可定制的,例如,通过下面的配置:

  1. // 更改PATHINFO参数分隔符
  2. ‘URL_PATHINFO_DEPR‘=>‘-‘,

我们还可以支持下面的URL访问: http://localhost/index.php/home-user-login-var-value

2:rewrite重写(伪静态)。可以自己写相关的rewrite规则,也可以使用系统为我们提供的rewrite规则。http://bbs.aaa.net/user/index。

apache手册中有一块是URL重写规则,可以看一下。

   REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。

 实现REWRITE

1.Apache则需要在入口文件的同级添加.htaccess文件,内容如下  

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

2.Apache配置文件中 httpd.conf配置文件中加载了mod_rewrite.so模块(删除前面的#号)然后将 AllowOverride None 将None改为 All

3.在项目的配置文件中 将文件URL模式改成REWRITE模式

‘URL_MODEL‘=> 2,

4.重启apache即可
3:兼容模式。是用于不支持PATHINFO的特殊环境,URL地址是: http://localhost/?s=/home/user/login/var/value

可以更改兼容模式变量的名称定义,例如:

‘VAR_PATHINFO‘ =>  ‘pathinfo‘

PATHINFO参数分隔符对兼容模式依然有效,例如:// 更改PATHINFO参数分隔符

‘URL_PATHINFO_DEPR‘=>‘-‘,

使用以上配置的话,URL访问地址可以变成: http://localhost/?s=/home-user-login-var-value

兼容模式配合Web服务器重写规则的定义,可以达到和REWRITE模式一样的URL效果。

例如,我们在Apache下面的话,.htaccess文件改成如下内容:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>

就可以和REWRITE模式一样访问下面的URL地址访问了: http://localhost/home/user/login/var/value

时间: 2024-11-05 12:34:08

thinkphp 3.2 的pathinfo模式与控制器的关系的相关文章

制作类似ThinkPHP框架中的PATHINFO模式功能(二)

距离上一次发布的<制作类似ThinkPHP框架中的PATHINFO模式功能>(文章地址:http://www.cnblogs.com/phpstudy2015-6/p/6242700.html)已经过去好多天了,今晚就将剩下的一些东西扫尾吧. 上一篇文章已经实现了PATHINFO模式的URL,即我们访问MVC模式搭建的站点时,只需要在域名后面加上(/module/controller/action)即可,很智能化.并且通过new Object时的自动触发函数实现类文件的自动载入,因此只要我们搭

nginx+thinkphp下解决不支持pathinfo模式以及存在的各种404,500问题

nginx环境问题弄了两天,发现网上很多人的帖子要么复制粘贴,要么就是没有结贴,还自己写一句“哈哈,我自己解决了”之类的,这点我就鄙视这些发帖的同胞了,你说你问题问了,问题解决了也不给个解释.还在搜索的前几页,想没想过需要答案的人的感受呢.满心欢喜的去看答案,发现没有结贴.好吧,不多说,进入正题. 我这种方式是不需要将URL_Model改为rewrite/兼容的: 大约第43行,按照下面的对照自己的code进行修改,请注意细节的符号: location / {            root  

nginx完美支持thinkphp3.2.2(需配置URL_MODEL=&gt;1 pathinfo模式)

来源:http://www.thinkphp.cn/topic/26657.html 第一步:配置SERVER块 server { listen 80; server_name www.domain.com domain.com; error_page 404 /404.html; error_page 500 502 503 504 /50x.html; # \.php 只处理动态请求,对于静态资源请求由下面的 location匹配和处理 location ~ \.php { root /da

ThinkPHP的URL模式有四种,默认的PATHINFO模式

ThinkPHP的URL模式有四种,默认是PATHINFO模式,其他三种分别为:普通模式.REWRITE和兼容模式. 浏览器输入格式为:http://localhost/demo39/index.php/模块/控制器/操作 在Home的Controller建立UserController.calss.php,如下图所示: 在浏览器上输入 http://localhost/demo39/index.php/Home/User 得到的结果为: user index 这时在浏览器中输入上面所说的输入格

Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持

前面有关于lnmp环境的搭建,在此就不在赘述.下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一.更改php.ini将;cgi.fix_pathinfo=0  改为cgi.fix_pathinfo=1 二.更改nginx配置文件中php的location设置pathinfo模式: location ~ \.php { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index in

[PHP] url的pathinfo模式加载不同控制器的实现

使用自动加载和解析url的参数,实现调用到不同的控制器,实现了pathinfo模式和普通的url模式 文件结构: |--Controller |--Index |--Index.php |--Application.php Application.php <?php class Application{ public static function main(){ header("content-type:text/html;charset=utf-8"); self::regi

nginx低版本不支持pathinfo模式,thinkphp针对此问题的解决办法

将一个thinkphp项目从apache环境移到nginx1.2上,怎奈,nginx这个版本默认不支持pathinfo模式 首先,编辑nginx的虚拟主机配置文件 location ~ .*.(php|php5)?$ { #原有代码 } if (!-e $request_filename) {   rewrite  ^(.*)$  /index.php?s=$1  last;   break;    } #去掉$是为了不匹配行末,即可以匹配.php/,以实现pathinfo #如果你不需要用到p

Nginx支持thinkphp pathinfo模式

Nginx默认不支持thinkphp的pathinfo 模式,无奈只能修改nginx配置.修改后的配置如下: 1.nginx.conf: user  apache apache; worker_processes  16; worker_cpu_affinity auto; pid        /var/run/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections  51200; } http

修改Nginx解决ThinkPHP不支持PathInfo模式

最精简的Nginx配置 server { listen 80; server_name test.com; charset utf-8; location / { root E:/WWW/test; index index.php; if (!-e $request_filename) { #一定要用(.*)匹配整个URI,包含URI第一个字符反斜杠/ #rewrite ^(.*)$ /index.php?s=$1 last; rewrite ^/(.*)index.php(.*)$ $1/in