PHP正则路由的实现原理

实现代码如下

<?php
$route['/user/(\d+).html'] = function ($args) {
    print_r($args);
    echo '我是前台用户页面额';
};

$route['/'] = function ($args) {
    print_r($args);
    echo '我是前台网站首页';
};


//获取 action
$action = explode('&', $_SERVER['QUERY_STRING']);
$action = empty($action[0]) || $_SERVER['QUERY_STRING'][0] != '/' ? '/' : $action[0];

//路由查找
$route_keys = array_keys($route);
$flag = false;
foreach ($route_keys as $route_key) {
    preg_match('#^' . $route_key . '$#is', $action, $all);
    if (!empty($all)) {
        $route[$route_key]($all);
        $flag = true;
        break;
    }
}
if (false === $flag) {
    echo '页面被程序猿吃了...';
}

假设这个文件放在网站根目录,并且url进行了如下重写:

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

那么现在访问 http://localhost/ , http://localhost 显示出来的内容都是

Array
(
    [0] => /
)
我是前台网站首页

访问 http://localhost/user-123.html 显示出来的内容是

Array
(
    [0] => /user/12.html
    [1] => 12
)
我是前台用户页面额
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值