可以說一個漂亮的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
將會看到我們解析出的控制器名,方法名
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答