构建一个属于你的PHP MVC 框架—-1.URL路由配置

可以说一个漂亮的URL对于一个MVC框架而言不是必须的。
你可以run你自己的framework,然后,在URL后边自己添加自己的参数,比如:index.php?c=a&m=b等等。
不过这种URL对于浏览器而言,看起来不太友好,对于搜索引擎而言也不是太过友好,对于SEO还会有一定的影响。

所以,最好你的MVC框架是一个单入口程序,所谓的单入口程序就是所有的请求都会通过一定的规则,然后有一定的bootstrap引导,这样我们就可以在bootstrap中加入一些扩展点。当然,可以明白的说,扩展点不是给我们用的,是给一些对于我们的框架不是很满意,然后想加入一些改造的人来用的,这样就加强了MVC框架的灵活性。

OK,步入正题:

搜索引擎比较喜欢的URL方式是域名直接跟斜线,然后隔离各种参数,比如上边我们用GET方式传递的c和m等。就是类似http://a.com/index/hello这种方式。这种方式要想变成我们需要的形式就需要借助于web服务器的一种工具来重写URL。作者用的服务器是apache,apache里边的这个模块叫做rewrite。开启rewrite,这部分属于apache服务器配置的问题,在此不做描述。

这里主要介绍简单的URL规则。rewrite模块是利用正则的方式来匹配浏览到的URL然后,可以把匹配到的部分重新拼接成一个新的URL。

框架的URL,rewrite规则定义如下:

<IfModule mod_rewrite.c>
RewriteEngine On

#路由规则,除了*.php static robots.txt 以外的所有请求
RewriteCond $1 !^([a-z]+\.php|static|robots\.txt|uploads|unionhotel)

#路由默认的首页
RewriteRule ^()?$ index.php?%{QUERY_STRING} [L]

#路由某些特殊的规则,这里是以beta开头的规则
RewriteRule ^(beta)/(.+)?$ $1.php/$2?%{QUERY_STRING} [L]

#路由其余的请求
RewriteCond $1 !^([a-z]+\.php|static|robots\.txt|uploads|betasns|unionhotel)
RewriteRule ^([a-z]+)/(.+)?$ index.php/$1/$2?%{QUERY_STRING} [L]
RewriteRule ^([a-z]+)?$ index.php/$1?%{QUERY_STRING} [L]

</IfModule>

把这个文件保存为.htaccess然后,注意开启你的apache的rewrite模块,然后允许在htaccess中设置,就可以生效了。

当你访问localhost/a/b的时候就会被改写为localhost/index.php/a/b
然后我们就可以在index.php中做文章了,其中可以获取到a/b然后定义路由规则。

域名后边的URL字段可以通过$_SERVER[‘path’] 来获得,一个简单的入口文件定义如下:

//定义默认调用index控制器的index方法
$controller_name = 'index';
$method_name = 'index';

//定义路由函数,第一部分作为控制器的名字,第二部分作为控制器的方法
function route_request(){
    global $controller_name,$method_name;
    $uri = $_SERVER['PATH_INFO'];
    $uri = trim($uri,'/');
    $uri_arr = explode('/',$uri);
    if(count($uri_arr) >= 2 ) {
       $controller_name = $uri_arr[0];
       $method_name = $uri_arr[1];
    }
    return;
}
route_request();

保存以上文件为index.php
然后附加上我们的测试打印代码:

   var_dump($controller_name,$method_name);

这样我们访问当前目录localhost/a/b
将会看到我们解析出的控制器名,方法名



注:转载请注明文章来源:流影部落阁

构建一个属于你的PHP MVC 框架—-1.URL路由配置》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注