swoole_framework url重写实现

url重写过后看起来清爽很多,也规范很多。 例如:

//重写前
http://localhost/page/index/?a=b&b=c
//重写后
http://localhost/page/b/c

url重写当然离不开正则,首先来看看swoole_framework实现重写的具体代码:

/**
 * url 正则重写解析
 * @param string $uri
 * @return string
 */
function swoole_urlrouter_rewrite(&$uri) {
    //读取重写规则
    $rewrite = Swoole::$php->config['rewrite'];
    if (empty($rewrite) or ! is_array($rewrite))
        return false;
    $match = array();
    foreach ($rewrite as $rule) {
        if (preg_match($rule['regx'], $uri['path'], $match)) {
            //合并到GET中
            if (isset($rule['get'])) {
                $p = explode(',', $rule['get']);
                foreach ($p as $k => $v) {
                    $_GET[$v] = $match[$k + 1];
                }
            }
            return $rule['mvc'];
        }
    }
    return false;
}

从代码中可以看到,swoole_framework的重写是把正则提出的值赋值到$_GET这个全局变量中。

下面来建立一个简单的路由文件: <?php

/**
 * @filename rewrite.php
 * @encoding UTF-8
 * @author 廖才新 <97111309@qq.com>
 * @version 1.0
 * @Description uri重写规则
 */
return array(
    array(
        'regx' => '/^\/page\/(.*?)\/(.*?)/iU', //匹配规则
        'get' => 'class,method', //值
        'mvc' => array(
            'controller' => 'page',
            'view' => 'index'
        )//路由地址
    )
);

一条完整的路由规则包含三个元素 regx get mvc

regx元素是匹配规则

get 是提取值的键名

mvc 是真正提交的控制器和视图。

标签: swoole, url_rewrite, 重写

添加新评论