首页 > 编程 > PHP > 正文

构建PHP MVC框架1.URL路由配置

2020-03-22 19:14:30
字体:
来源:转载
供稿:网友
  • 可以说一个漂亮的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 html' target='_blank'>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编程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表