- 浏览: 250934 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
aqyzcs:
你好,我想问一下,这个羽毛(Feather)图片编辑器里面自带 ...
给自己的Web站点嵌入一个免费的图片编辑器 -
wwx840723:
$db = ADONewConnection("ms ...
为PHP微软SQL Server驱动加入更好的ADODB支持 -
qxinfo:
还不如看看这个简单版的crmhttp://crm.fzerp. ...
用PHP开发CRM一年多小记 -
星光1224:
谢谢分享~~有一个问题:http://renzhen.itey ...
客户端JavaScript实战撤销恢复功能总结 -
hanbiaoo:
安装node.js, uglifyjs都不是必须的。文件目录调 ...
放弃繁琐的配置!直接使用UglifyJS批量压缩目录下所有JS文件
曾几何时,我们公司准备开发一套新的建站系统,决定将以前的框架给KO掉,重新开发一套新的框架来适应新的系统功能。领导们不希望使用外面已有的框架,号称要开发有自己特色的框架(不懂开发的领导害死人)。于是我们又投入到了新的开发当中。
由于我们的系统支持伪静态,以前的系统是直接使用服务器apache或IIS自带的rewrite文件定义规则,而框架中没有任何路由机制,于是这次框架准备使用新的策略,由PHP实现路由机制。于是我开始了功能实现的探索之路。
开发之前,我先了解‘路由机制’要做什么,它主要做两件事。
1.路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.wopop.com/article/1 其中:/article/1 -> ?_m=article&id=1。
2.其次,是将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。由于路由机制隔离了URL结构和参数的转换关系,使的日后结构的变化不会影响下面代码的执行。
通过上面的了解,可以得出要编写一个路由机制要一下几步:
1.编写服务器apache或IIS自带的rewrite文件,将URL结构导入index.php。
2.一个路由规则配置文件。
3.一个路由解析器,用来解析规则,匹配和转换URL。
于是,我们一一实现其中的每一个部分。
1.rewrite文件编写,以Apache为例:
上面的代码就是将URL结构导入index.php中,具体的rewrite细节就不赘述了。
2.在PHP中设置一个路由规则配置文件routes.php,我简单的使用了一个hash数组编写规则:
3.路由机制中最复杂也是最重要的一部分,就是解析器。
解析器有两个类组成(名字可能起的不佳)。
一个是Route,作为整个解析器对外的接口,用于解析规则,匹配和转换URL,然而它只是一个代理,实际操作不是直接由它直接做的。
一个是RoutePattern,每个RoutePattern实例对应规则数组中的一条记录,一个Route实例包含多个RoutePattern,而Route中的所有操作都会调用内部所有RoutePattern实例操作,并进行整合。
关于路由配置文件的解析,主要细节全在类RoutePattern中,关于RoutePattern中对规则的解析、URL匹配和转换URL细节,篇幅和精力有限,今天就不详细介绍了,下回再仔细分析。
我的微博地址:http://weibo.com/jameren,欢迎大家关注,:lol: 。
顺便做个广告:
我最近使用了15G超大空间免费网络U盘—@酷盘,可在PC及手机上使用,无文件类型及大小限制,传输速度快,文件永不丢失,一起来体验吧!通过下面的邀请链接注册,你和我都将额外获得256MB的酷盘空间! http://t.cn/aNLZje
由于我们的系统支持伪静态,以前的系统是直接使用服务器apache或IIS自带的rewrite文件定义规则,而框架中没有任何路由机制,于是这次框架准备使用新的策略,由PHP实现路由机制。于是我开始了功能实现的探索之路。
开发之前,我先了解‘路由机制’要做什么,它主要做两件事。
1.路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.wopop.com/article/1 其中:/article/1 -> ?_m=article&id=1。
2.其次,是将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。由于路由机制隔离了URL结构和参数的转换关系,使的日后结构的变化不会影响下面代码的执行。
通过上面的了解,可以得出要编写一个路由机制要一下几步:
1.编写服务器apache或IIS自带的rewrite文件,将URL结构导入index.php。
2.一个路由规则配置文件。
3.一个路由解析器,用来解析规则,匹配和转换URL。
于是,我们一一实现其中的每一个部分。
1.rewrite文件编写,以Apache为例:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) index.php/$1 [L] </IfModule>
上面的代码就是将URL结构导入index.php中,具体的rewrite细节就不赘述了。
2.在PHP中设置一个路由规则配置文件routes.php,我简单的使用了一个hash数组编写规则:
/** *路由配置文件编写说明: * 路由配置在一个array数组中,一条记录代表一个规则 * 其中数组key的数据代表匹配的路径格式:使用特定的字符串标识 如:'/{id}' * 字符串中可以包含特定的变量,所有变量使用大括号{}包裹起来 * 数组value里是一个array数组,是对key中路径中变量进行特定处理 * 变量写在数组的key中,规范写在数组的value里,如:array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index') * 规范分成两类: * 1.格式判断:比如 '/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index') 为例,其中'id'=>'/\d+/'就是一个格式判断, * 表示id变量只能是数字,格式判断后面只能使用正则表达式,由于PHP没有正则类,所以我指定 '/XXX/'和'#XXX#'格式的字符串为正则表达式 * 2.默认参数:比如 '/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index') 为例,其中'_m'=>'frontpage'就是一个默认参数, * 因为前面的路径没有_m和_a信息,所以后面会使用默认参数作为_m和_a的值 * * 所以对于规则'/{id}'=> array('id'=>'/\d+/','_m'=>'frontpage','_a'=>'index')。我传入 /3 系统会转换成 index.php?_m=frontpage&_a=index&id=3 * * 规则匹配是按照$routes数组的顺序逐一匹配,一旦匹配上了就不往下匹配了。所以一些特定的匹配规则要放在前面,通用的放在后面。 * 否则可能导致不执行特定的匹配规则了 */ $routes= array( '/' => array('_m'=>'wp_frontpage','_a'=>'index'), '/{id}'=> array('id'=>'/\d+/','_m'=>'wp_frontpage','_a'=>'index'), '/{_m}/{_a}/{id}'=> array('id'=>'/\d+/'), '/{_m}/{_a}'=> array() );
3.路由机制中最复杂也是最重要的一部分,就是解析器。
解析器有两个类组成(名字可能起的不佳)。
一个是Route,作为整个解析器对外的接口,用于解析规则,匹配和转换URL,然而它只是一个代理,实际操作不是直接由它直接做的。
一个是RoutePattern,每个RoutePattern实例对应规则数组中的一条记录,一个Route实例包含多个RoutePattern,而Route中的所有操作都会调用内部所有RoutePattern实例操作,并进行整合。
class Route { private static $instance = null; private $routepatterns=array(); private function __construct() { $routes = array(); include ROOT."/routes.php"; foreach($routes as $key=>$value){ $this->routepatterns[]=new RoutePattern($key,$value); } if(!isset($_SERVER['PATH_INFO'])) return false; $urlpath= $_SERVER['PATH_INFO']; $ismatch=$this->match_url($urlpath); $strip_urlpath=str_replace('/','',$urlpath); if(!$ismatch&&!empty($strip_urlpath)){ Content::redirect(PAGE_404); } } /** * 用路由规则匹配对应的url地址,匹配成功将对应url参数放入$_GET中 * @param string url地址 * @return bool 是否匹配成功 */ public function match_url($urlpath){ foreach($this->routepatterns as $router){ $urlargs=$router->match_url($urlpath); if($urlargs!==false){ $_GET=array_merge($urlargs,$_GET); return true; } } return false; } public function rewrite_url($urlparams){ foreach($this->routepatterns as $router){ $urlstr=$router->rewrite_url($urlparams); if($urlstr!==false){ return $urlstr; } } $actualparams=array(); foreach($urlparams as $arg=>$val){ $actualparams[]=$arg."=".urlencode($val); } $actualparamstr=implode('&', $actualparams); $rewriteurl="/index.php"; if(!empty($rewriteurl))$rewriteurl.="?{$actualparamstr}"; return $rewriteurl; } public static function init() { if (null == self::$instance) { self::$instance = new Route(); } return self::$instance; } } class RoutePattern{ //...... }
关于路由配置文件的解析,主要细节全在类RoutePattern中,关于RoutePattern中对规则的解析、URL匹配和转换URL细节,篇幅和精力有限,今天就不详细介绍了,下回再仔细分析。
我的微博地址:http://weibo.com/jameren,欢迎大家关注,:lol: 。
顺便做个广告:
引用
我最近使用了15G超大空间免费网络U盘—@酷盘,可在PC及手机上使用,无文件类型及大小限制,传输速度快,文件永不丢失,一起来体验吧!通过下面的邀请链接注册,你和我都将额外获得256MB的酷盘空间! http://t.cn/aNLZje
发表评论
-
UglifyJS压缩的一个奇怪的bug及解决办法
2012-11-13 10:42 7038今天遇到一个很奇怪的问题,在开发测试没有问题的JS代码, ... -
放弃繁琐的配置!直接使用UglifyJS批量压缩目录下所有JS文件
2012-10-18 08:47 9191JS代码压缩是一种十分常见的前端优化的手段,对于大量 ... -
给自己的Web站点嵌入一个免费的图片编辑器
2012-10-15 10:20 17835随着open api运动的流行和深入,很多原本需 ... -
PHP实现IP黑白名单过滤
2012-09-13 10:17 6976需求来自一个运维的同事,对一个php文件执行进行IP过 ... -
客户端JavaScript实战撤销恢复功能总结
2012-03-19 17:02 11690撤销和恢复功能,英文为:Undo和Redo,快捷键 ... -
如何脱离Rails单独使用activesupport
2012-03-13 13:17 1527我一直有使用Ruby写一些脚本的习惯,active ... -
神奇的Apache Rewrite,程序员使用Rewrite的一些体会
2012-02-15 11:42 1903最近在公司开发工作中,一些功能使用了Apache Rew ... -
PHP高效获取树结构信息
2011-12-30 11:26 6986在开发中,经常有一 ... -
PHP简单的伪静态URL机制实现
2011-12-29 12:51 11曾几何时,我们公司准备开发一套新的建站系统,决定将以前的 ... -
Chorme插件练手之作——27270.net美女图片查看器
2011-09-23 13:24 7649最近对Google的相关技术比较感兴趣,刚刚学了一下 ... -
Android Notification 传递参数[转]
2011-09-21 09:07 6032请大家先看这个说明: 相信大家在使用课本或者其他资料时 ... -
Make code sweet.PHP特殊用法的一些总结(2)--PHP中的‘callback’回调
2011-07-11 17:26 2082本章总结一下PHP中‘callback’的一些实用用法。 1 ... -
Make code sweet.PHP特殊用法的一些总结(1)
2011-07-07 10:46 924最近一个项目接近尾声了,工作慢慢轻松了下来,闲暇时就看看 ... -
PHP应用客户端传复杂参数,JSON vs jQuery.param
2011-06-17 11:26 2020最近,我们的网站系统出现了问题,一个保存布局 ... -
PHP框架,伤不起啊,伤不起
2011-06-07 00:05 1726自从Rails刮起了一阵框架风,其它语言群起响应,Java,P ... -
PHP的惰性加载和Iterator的使用
2011-05-23 11:21 3414最近换了工作,改做建站软件了,我们公司建站软件的模板系统出了问 ... -
PHP输出非HTML格式文件总结
2011-04-14 16:37 4584在PHP系统开发中,除了显示HTML外,偶尔也会遇到输出 ... -
PHP中使用static变量做缓存(小技巧)
2011-03-10 13:16 5658我最近为客户做一 ... -
Prototype 函数Position.clone在IE下失效
2011-03-04 14:01 979在我们的系统中,经常会用到点击一个按钮,于是在这个按钮的周 ... -
PHP根据年份和周数获取日期
2011-03-03 17:24 5810这个是我总结PHP时间操作的第二篇文章,在开发周报,会用 ...
相关推荐
总结一下,PHP图片伪静态技术通过`.htaccess`文件的URL重写规则和`topic.php`主程序配合,实现了动态请求与静态URL的映射,提高了用户体验和搜索引擎优化的效果。同时,合理的图片存储路径管理确保了图片资源的正常...
总结来说,PHP优化全通是提升网站性能的关键,而实现PHP伪静态则有助于提高网站的搜索引擎可见性。两者结合,既能保证网站运行效率,又能提升搜索引擎排名,从而带来更好的用户体验和业务增长。
总结来说,URL伪静态是一项提升网站质量和SEO效果的重要技术,通过伪装静态URL的形式,既保留了动态网站的灵活性,又获得了静态URL的优点。在实际应用中,我们需要根据服务器类型和所使用的框架或CMS选择合适的实现...
URL重写是实现伪静态最常用的方法,通过Apache或Nginx服务器的配置文件进行设置。在Apache中,我们通常使用`.htaccess`文件,通过`RewriteEngine`指令和`RewriteRule`规则来实现。例如: ```apacheconf ...
3. **重写规则配置**:为了使服务器能够识别并正确处理伪静态URL,需要在服务器配置文件(如Apache的.htaccess文件或Nginx的配置文件)中添加URL重写规则。例如,将请求的伪静态URL重定向到实际的动态页面脚本上。 ...
在这个列表项中,每个文章标题都链接到了一个伪静态URL,例如`article.asp?/26.html`,这样的URL在用户看来就像一个静态页面,但实际上通过参数传递了文章ID。 #### 总结 通过上述分析,我们可以看出,使用ASP...
在网站优化和搜索引擎友好性方面,伪静态技术扮演着重要的角色。它将动态网页的URL转化为看似静态的页面链接,从而提升用户体验并有利于SEO。本文将深入探讨伪静态配置的相关知识,包括其原理、作用以及如何进行配置...
1. **URL重写**:通过配置Web服务器(如Apache或IIS)的规则,将动态URL转换为静态化的伪静态URL。例如,使用Apache的`.htaccess`文件或者IIS的`web.config`文件,配合Rewrite模块(如提供的Rewrite.dll)来实现URL...
5. **验证**:访问网站,确保可以正常运行且URL呈现伪静态形式。 以上就是关于ThinkPHP3.1.3升级到PHP7以及Nginx配置伪静态的详细说明。在这个过程中,`index.php`是入口文件,`ThinkPHP`是ThinkPHP框架的核心库,...
3. **框架与CMS系统支持**:许多流行的PHP框架(如Laravel、Symfony)和内容管理系统(如WordPress、Joomla)内置了伪静态功能,开发者可以通过简单的设置实现。例如,在WordPress中,可以在设置中开启“自定义结构...
而伪静态URL,也就是看似静态但实际上由服务器动态生成的URL,能够使URL看起来更简洁、更符合人类阅读习惯,从而提高搜索引擎的抓取效率和用户体验。"Ultimate SEO URLs 优化插件"正是实现了这一目标,将原本动态的...
4. **方便迁移和维护**:伪静态URL更容易在不同服务器间迁移,也便于后期网站结构的调整。 **三、UrlRewrite的配置与规则** UrlRewrite通常通过编写规则文件来实现URL重写,如IIS的web.config或Apache的.htaccess...
Nginx,作为一款高性能的HTTP服务器和反向代理服务器,提供了强大的重定向功能,特别是其伪静态处理机制,能够帮助我们优雅地解决这些问题。 #### 2. 为什么需要伪静态与重定向 在网站运营过程中,若不实施有效的...
伪静态是指通过URL重写(即rewrite)技术将动态网页(例如 .php、.asp 或 .aspx 等格式)的地址转化为静态网页的形式,但实际上这些网页仍然是动态生成的。这种技术常用于提高网站对于搜索引擎的友好性(SEO),同时...
同时,开发者需要在后端程序中解析这些伪静态URL,并返回相应的内容。 综合上述,这个主题中的示例可能是用存储过程来优化数据库查询,实现高效的分页功能,同时结合伪静态技术优化网站的SEO,让网页更容易被搜索...
1. 提升用户体验:伪静态URL更符合用户的阅读习惯,看起来更加直观。 2. SEO优化:搜索引擎更容易抓取和索引静态化的网页,有利于提升网站的搜索排名。 3. 加快访问速度:静态HTML页面加载速度比动态页面快,提升...
在这个源码中,可能存在自定义的路由规则来解析和处理伪静态URL。 5. **数据库交互**:电影网站通常需要存储大量的电影信息,包括标题、演员、简介等,这需要与数据库进行交互。可能使用了PHP的PDO(PHP Data ...
【描述】中的"基于PHP的Flash小游戏伪静态版源码.zip"进一步强调了这个项目是关于实现Flash游戏的伪静态URL。在Web开发中,伪静态是一种技术手段,它将动态URL转换为静态URL的形式,以提高搜索引擎优化(SEO)和用户...
标题中的“基于PHP的KASEN动漫抓取伪静态缓存版php版源码”表明这是一个使用PHP编程语言开发的项目,主要用于从KASEN动漫网站抓取数据,并且采用了伪静态技术和缓存机制。这个项目可能是一个Web应用程序,允许用户...
ISAPI_Rewrite 2.9 是一款针对IIS(Internet Information Services)Web服务器的URL重写工具,它使得在IIS环境下实现URL伪静态功能变得简单易行。URL伪静态技术是现代网站优化搜索引擎优化(SEO)的重要手段,通过将...