在不到80行代码里面,实现了功能强大的php伪静态路由功能。(包括伪静态路由和url产生)
    精简的代码带来非常高的执行效率,对比旧版的UrlRewrite扩展速度上有三倍的提升。

    • 支持moduels多模块。
    • 支持URL和参数定制。
    • 支持http开头的域名适配,对跨站构造URL有良好的支持。
    • 支持泛域名适配,如 *.example.com 的适配。
    • 规则更简单,更直观,更容易配置了。
    • 通过url()函数即可构造URL地址。

    一般初学者使用伪静态时,首先遇到的问题是产生“404找不到页面”的情况。这情况通常都是因为没有正确配置服务器的原因。

    接下来我们介绍一下较为常见的服务器的伪静态配置方法。

    Apache

    在默认情况下,sp框架在程序根目录已经自带.htaccess文件,该文件在Apache服务器下面是自动加载并且已经完成配置的。

    根目录的.htaccess文件内容是:

    注意,有时候我们会发现Apache服务器即使已经有了.htaccess文件,但是还是会发生404的情况,这样就需要检查一下Apache本身的配置是否开启“文件配置”的选项了。

    1. 打开并且搜索到您的web根目录配置。如:

      1.   AllowOverride None
      2. </Directory>

      主要是修改AllowOverride的值,AllowOverride意思是:是否能通过.htaccess文件配置来覆盖httpd.conf的配置。

    2. 检查以下语句前面有没有#号,有的话去掉#。如果无法找到该行配置,则在httpd.conf文件最后增加。

    3. 重启Apache即可。

    Nginx

    Nginx现在非常流行,大多数时候已经替代了Apache的地位。

    Nginx需要配置当前站点的配置文件,如下:

    新浪SAE平台

    config.yaml是SAE的配置文件,以下是伪静态的实例:

    1. name: speedweb
    2. version: 3
    3. - rewrite: if (!-d && !-f) goto "/index.php?%{QUERY_STRING}"

    sp框架的伪静态配置,在protected/config.php文件里面,大概是这样:

    如果需要关闭rewrite,可以设置’rewrite’ => null,那么全部URL都会变成原来的“/index.php?m=模块&c=控制器&a=方法&参数名=参数值”的形式。

    我们来了解几个规则,非常简单:

    1. <m><c><a>分别指代modules,controller,action。
    2. 其他的<单词>,都是_GET的参数名称。
    3. 越是明确指向的URL配置,越要放前面。比如说’admin/index.html’,要放在’admin/<c>_<a>.html’的前面,因为’admin/index.html’是明确的。而’<c>/<a>’和’/‘就被放到最后了
    4. 如果是’admin/<c>_<a>.html’和’admin/<c>_<a>_<username>.html’,那么就应该是’admin/<c>_<a>_<username>.html’在前面,因为它更明确指向有参数username的地址。

    我们来看看各种配置对应表:

    当配置好上述的规则后,我们可以通过url()函数,来生成URL地址。

    url()函数有三个参数:$c, $a, $param

    1. $c参数是控制器名称,对应到protected/controller目录下面的controller类,如果用到modules模块开发,那么参数值是“模块名/控制器名”。对应该模块目录下的controller类。
    2. $a参数是方法名称。对应controller类里面的,带action前缀的方法。
    3. $param是参数数组,键是参数名称,值是参数值。

    在没有伪静态的时候

    在开启伪静态之后

    开启伪静态之后,会根据rewrite配置而定URL的生成方式。

    这里注意两个问题:

    1. 比配置多出来的参数,那么会以?参数名=参数值的方式跟在URL后面。上表应该可以看得出来。