在不到80行代码里面,实现了功能强大的php伪静态路由功能。(包括伪静态路由和url产生)
精简的代码带来非常高的执行效率,对比旧版的UrlRewrite扩展速度上有三倍的提升。
- 支持moduels多模块。
- 支持URL和参数定制。
- 支持http开头的域名适配,对跨站构造URL有良好的支持。
- 支持泛域名适配,如 *.example.com 的适配。
- 规则更简单,更直观,更容易配置了。
- 通过url()函数即可构造URL地址。
一般初学者使用伪静态时,首先遇到的问题是产生“404找不到页面”的情况。这情况通常都是因为没有正确配置服务器的原因。
接下来我们介绍一下较为常见的服务器的伪静态配置方法。
Apache
在默认情况下,sp框架在程序根目录已经自带.htaccess文件,该文件在Apache服务器下面是自动加载并且已经完成配置的。
根目录的.htaccess文件内容是:
注意,有时候我们会发现Apache服务器即使已经有了.htaccess文件,但是还是会发生404的情况,这样就需要检查一下Apache本身的配置是否开启“文件配置”的选项了。
打开并且搜索到您的web根目录配置。如:
AllowOverride None
</Directory>
主要是修改AllowOverride的值,AllowOverride意思是:是否能通过.htaccess文件配置来覆盖httpd.conf的配置。
检查以下语句前面有没有#号,有的话去掉#。如果无法找到该行配置,则在httpd.conf文件最后增加。
重启Apache即可。
Nginx
Nginx现在非常流行,大多数时候已经替代了Apache的地位。
Nginx需要配置当前站点的配置文件,如下:
新浪SAE平台
config.yaml是SAE的配置文件,以下是伪静态的实例:
name: speedweb
version: 3
- rewrite: if (!-d && !-f) goto "/index.php?%{QUERY_STRING}"
sp框架的伪静态配置,在protected/config.php文件里面,大概是这样:
如果需要关闭rewrite,可以设置’rewrite’ => null,那么全部URL都会变成原来的“/index.php?m=模块&c=控制器&a=方法&参数名=参数值”的形式。
我们来了解几个规则,非常简单:
- <m><c><a>分别指代modules,controller,action。
- 其他的<单词>,都是_GET的参数名称。
- 越是明确指向的URL配置,越要放前面。比如说’admin/index.html’,要放在’admin/<c>_<a>.html’的前面,因为’admin/index.html’是明确的。而’<c>/<a>’和’/‘就被放到最后了。
- 如果是’admin/<c>_<a>.html’和’admin/<c>_<a>_<username>.html’,那么就应该是’admin/<c>_<a>_<username>.html’在前面,因为它更明确指向有参数username的地址。
我们来看看各种配置对应表:
当配置好上述的规则后,我们可以通过url()函数,来生成URL地址。
url()函数有三个参数:$c, $a, $param
- $c参数是控制器名称,对应到protected/controller目录下面的controller类,如果用到modules模块开发,那么参数值是“模块名/控制器名”。对应该模块目录下的controller类。
- $a参数是方法名称。对应controller类里面的,带action前缀的方法。
- $param是参数数组,键是参数名称,值是参数值。
在没有伪静态的时候:
在开启伪静态之后:
开启伪静态之后,会根据rewrite配置而定URL的生成方式。
这里注意两个问题:
- 比配置多出来的参数,那么会以?参数名=参数值的方式跟在URL后面。上表应该可以看得出来。