#1 jake
urlrewrite也就是URL重写,是在服务器重写模块的支持下,将用户的请求都转送到某PHP文件上,然后再通过该PHP来进行调度执行对应的程序。
urlrewrite的最常规的应用是“伪静态”,即是通过重写的特性来将原本
http://www.example.com/index.php?c=main&a=mypage
这样的并不是很美观同时对搜索引擎亦不友好的URL地址,变成类似于
http://www.example.com/mypage.html
比较美观并且有利于SEO的URL的地址。
在SpeedPHP框架的2.5版本之后(版本>=2.5),已经加入了对urlrewrite伪静态的扩展类,让开发者可以方便地进行urlrewrite的设置和使用。
本文例子下载:rewrite25[1].rar
下面来介绍一下,spUrlRewrite扩展类的使用方法:
第一步,使用.htaccess
使用urlrewrite之前,首先要确定服务器能够支持.htaccess功能,Apache服务器默认支持,而IIS服务器则需要通过设置将请求转发到index.php文件上。
.htaccess脚本可以配置重写、缓存、错误提示等,非常有用,具体资料请自行搜索。
.htaccess的文件在windows下如果难以新建的话,可以直接从本例的压缩包中取出使用,使用记事本等功能均可对其编辑。
.htaccess放置在和index.php同级目录中即可。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]
这里.htaccess的作用主要就是将请求转发到index.php文件上。
第二步,应用程序配置
在应用程序配置中,需要加入以下的配置来启用urlrewrite扩展。
'launch' => array( // 加入挂靠点,以便开始使用Url_ReWrite的功能
'router_prefilter' => array(
array('spUrlRewrite', 'setReWrite'), // 对路由进行挂靠,处理转向地址
),
'function_url' => array(
array("spUrlRewrite", "getReWrite"), // 对spUrl进行挂靠,让spUrl可以进行Url_ReWrite地址的生成
),
),
第三步,根据需要,对urlrewrite进行配置
通过以上两步的设置后,应用程序已经支持了urlrewrite功能,所有通过spUrl生成的URL地址,都是伪静态的,同时,这些地址也可以正确的访问以及参数可以正常的接收。
这里继续说说spUrlRewrite扩展类的配置,在应用程序配置中加入以下配置:
'ext' => array(
'spUrlRewrite' => array(
'suffix' => '.html',
'sep' => '/',
'map' => array(
'search' => 'main@search',
'@' => 'main@no'
),
'args' => array(
'search' => array('q','page'),
),
),
),
suffix
- 生成地址的结尾符,网址后缀,可自由设置,如果“.do”或“.myphp”,该参数可为空,默认是.html。
sep
- 网址参数分隔符,建议是“-_/”之一
map
- 网址映射,比如 'search' => 'main@search',将使得 http://www.example.com/search.html 转向控制器main/动作serach执行。
- 特例 '@' => 'main@no' 如果映射是@,将使得符合以下条件的网址转向到 控制器main/动作no执行:1. 在map中无法找到其他映射,2. 网址第一个参数并非控制器名称。
args
- 网址映射附加的隐藏参数,如果针对某个网址映射设置了隐藏参数,则在网址中仅会存在参数值,而参数名称被隐藏。
- 比如 'search' => array('q','page'), 那么生成的网址将会是:http://www.example.com/search-thekey-2.html
- 配合map映射'search' => 'main@search',这个网址将会执行 控制器main/动作serach,而参数q将等于thekey,参数page将等于2
以上就是spUrlReWrite扩展类的使用。
对比一下:
“真实HTML生成”的spHtml功能,是能够真实的生成静态HTML文件,
spUrlReWrite是“伪静态”,也就是该文件并不存在,仅是通过服务器特性来进行转移,是“假静态”。
在spHtml和spUrlReWrite同时使用的时候,将优先访问spHtml生成的真实文件。
2012-08-04 13:56:00