路由转义的方法

2016-07-30 06:01:34 PHP 2608 0

思考的源头

最近有点想写个框架,闲着的时候我就看了看 TP3.2
然后我发现他自动生成的 .htaccess 文件里面

并没有重写路由

然后我查看了下
lib 中的 Dispatcher.class.php
发现它是分解的路由信息

$_SERVER['PATH_INFO']; // 用户输入的地址

大致意思就是先 explode 这个字符串
然后再把前三个参数取出来
ModuleControllerAction 的值,设置到 $_GET

那么我在 php 中可以这样获取信息

<?php
echo "用户输入的网址信息:" . $_SERVER['PATH_INFO'];
$path = $_SERVER['PATH_INFO'];
$path = explode('/', $_SERVER['PATH_INFO']);
echo "<br/>服务器获取的数组:<pre>";
array_shift($path);
var_dump($path);

$array_len = count($path); //获取数组长度
if ($array_len >= 3) {
    $_GET['module']     = $path[0];
    $_GET['controller'] = $path[1];
    $_GET['acton']      = $path[2];

    for ($i = 3; $i < $array_len; $i++) {
        $name = $path[$i]; //获取参数名,且不输出错误信息
        $i++;
        @$param      = $path[$i]; //获取参数的值,且不输出错误信息
        $_GET[$name] = $param;
    }
} else {
    header("http://www.hlzblog.top/default.html"); //如果不满足条件,则转跳到404页面
}
echo "输出获取的GET信息<br/>";
var_dump($_GET);
?>

例如当前网址我输入的是

http://web.blog.com/index.php/HLZ/Blog/read/id/2/

页面的输出信息

用户输入的网址信息:/HLZ/Blog/read/id/2/
服务器获取的数组:
array(5) {
  [0]=>
  string(3) "HLZ"
  [1]=>
  string(4) "Blog"
  [2]=>
  string(4) "read"
  [3]=>
  string(2) "id"
  [4]=>
  string(1) "2"
}
输出获取的GET信息
array(5) {
  ["module"]=>
  string(3) "HLZ"
  ["controller"]=>
  string(4) "Blog"
  ["acton"]=>
  string(4) "read"
  ["id"]=>
  string(1) "2"
  [""]=>
  NULL
}
注:若无特殊说明,文章均为云天河原创,请尊重作者劳动成果,转载前请一定要注明出处