可以说一个漂亮的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
将会看到我们解析出的控制器名,方法名
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答