PHP--MVC架构及rewrite技术

最近学习对PHP比较感兴趣,简单学习之后开始了解MVC架构----module,view,controller,找了一个比较经典的demo学习,在此分享一下 https://github.com/panique/php-login.git

前几个比较简单,基本没什么障碍,最后一个是FULL-MVC结构的,对我这个一直做嵌入式没接触过web前端的小白来说还是比较难理解的。

从概念上来说,对MVC架构比较好理解,module是与业务层面打交道的,view与页面展示息息相关,control则是负责控制转发,掌控大局。所以,这种机制决定了其设计上需采用单一入口,这样才能将所有请求通过control进行处理。代码没太大复杂性,在此表过不提,唯一疑惑的是index页面通过views\_templates\header.php进行框架设计,导航栏指向的是具体的url,这不符合单一入口的设计理念。通过运行程序,确实找不到相应页面。

demo既然是demo,那就说明他还是完整可行的,自身找原因。问了一位大神,说有一种rewrite的技术,可以改写url,一般通过在目录下的.htaccess文件实现。果不其然,在项目目录下存在一个这样奇怪的文件。接下来就研究rewrite的功能机制。

rewrite是通过rewriteRule,对当前目录及其子目录下的url进行改变,以apache为例,要想使用rewrite功能,需先加载Mod_Rewrite模块,可以通过echo phpinfo();看看apache是否已经加载mod_rewrite,如果没有在其配置文件中conf/httpd.conf文件进行相应修改。

  • 使能  LoadModule rewrite_module modules/mod_rewrite.so
  • 搜索AllowOverride 将None改为All
下面对照源码简单说一下.htaccess文件中rewrite功能的实现。项目目录下的. htaccess内容为
RewriteEngine On

#When using the script within a subfolder, put this path here, like /mysubfolder/
#If your app is in the root of your web folder, then pleae delete this line or comment it out like this line
RewriteBase /php-login-master/4-full-mvc-framework/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

RewriteEngine On 就是打开rewrite功能
RewriteBase 的作用域为: directory, .htaccess通常默认的虚拟主机的网站在使用.htaccess 进行重写规则时不需要执行设置该指令. 因为 RewriteBase 默认值是该 .htaccess 文件所在的目录地址.但是如果使用目录别名的话就需要设置这个指令了
RewriteCond 是判断条件,RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。
RewriteRule 是具体的指令,就是满足RewriteCond后所进行的操作。

关于RewriteCond和RewriteRule的详细介绍可以参考http://www.cnblogs.com/scgw/archive/2011/05/01/2033730.html

可见其判断条件是,所请求的url不是目录&&不是存在的正常文件&&不是符号链接。

RewriteRule的含义是将url作为index.php的参数传入。由此可见,通过rewrite技术使得我们可以用单一入口(index.php)进行MVC的架构设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值