一、場景介紹:
1、簡化url地址,方便大家記憶
2、有利于搜索引擎優化
3、安全(讓用戶看不出網站的目錄結構)
舉例:比如我這里將main控制器中的bb方法路由到kk,這樣,我們a標簽請求跳轉到cp.xiaobudiu.top/kk,實際上請求的卻是cp.xiaobudiu.top/main/bb。
實際上:我們可以將路由理解成一個字符串的別名,比如上邊,kk就是main/bb的別名。
?
?
二、單獨使用路由實現url隱藏目錄結構,優化url
?
1、定義連接符
這里使用的是crossphp框架,如果使用tp框架或者laravel框架等,也有對應的設置項。
注:這時,請求main控制器中的bb方法,url地址格式就從原來的cp.xiaobudiu.top/main/bb/? 變成? cp.xiaobudiu.top/main-bb/
?
2、定義a標簽到對應的控制器方法中
注:如果需要傳遞參數,可以拼接字符串。
當然,最好使用框架自帶的生成URL地址的方式(好處是動態生成url,并且支持傳遞參數)
比如:
?
3、瀏覽器生成的url地址如下:
這時,點擊a標簽,就會跳轉到main控制器中的bb方法。
?
4、通過框架路由,實現變化url,隱藏目錄結構,優化url的目的【其他框架類似】
注:其實,路由就是一個別名而已,不要想的特別高大上。
比如上邊,我將main控制器的bb方法路由到kk,那么我們請求cp.xiaobudiu.top/main-bb? ,? 和請求cp.xiaobudiu.top/kk? 請求的都是main控制器的bb方法。
?
5、定義a標簽
注:這時,我們為了隱藏目錄結構和優化url,則可以將a標簽的href更改成我們定義的路由地址
比如這里,我們由于定義了main/bb? 路由到 kk,所以a標簽這樣寫。
再次強調:路由只是一個別名,你想url怎么變化,都看你的心情定義路由。
?
6、這時,生成的a標簽鏈接如下
?
點擊a標簽,就會訪問到
?
這樣,我們就實現了更改url地址,隱藏目錄結構,優化url的目的。
?
?
三、使用路由和nginx rewrite規則相結合的方式(推薦)
?
1、為什么要使用路由和nginx rewrite規則相結合的方式
注:上面是單純使用路由達到這個更改url地址,隱藏目錄結構,優化url目的,但是實際場景中,我們生成url地址一般不是直接指定的,而是通過框架的方法來生成url,生成url時,肯定用的是原來的控制器和方法,而不是直接往上面寫路由,這時,我們生成的url格式就是
cp.xiaobudiu.top/main-bb ,? 而不是我們期望的 cp.xiaobudiu.top/kk , 這樣,也就達不到我們想要的隱藏目錄結構的目的。
這時,我們就需要結合路由和rewrite規則。
?
2、原理:
(1)舉例我們a標簽中的href 是通過框架的方法生成的url,生成之后的url地址格式如下:
cp.xiaobudiu.top/main-bb
(2)用戶點擊a標簽,我們通過nginx 的rewrite規則將當前url重定向到一個新的網址,也就是我們期望的網址
比如,我們在nginx中定義rewrite規則,將 main-bb 重定向到kk
location / {if (!-e $request_filename) {rewrite ^/main-bb-(\d+)/ /kk-$1/ permanent;rewrite ^/(.*)$ /index.php?$1 last;}}
這時,點擊a標簽(href為cp.xiaobudiu.top/main-bb),nginx服務器會自動將其永久重定向到 cp.xiaobudiu.top/kk
注:此時會報錯,因為找不到kk的位置(當然找不到了,我們還沒有定義路由,給main-bb起別名為kk呀)
(3)定義路由
/*** 路由配置* 'index' => 'main:index'* 為 main->index 指定別名為index* 如果為控制器和方法指定了別名,會自動使用別名*/'router' => array('kk' => 'main:bb','help' => 'help:index',),
(4)現在,由于我們已經定義了相應的路由,nginx重定向后的url cp.xiaobudiu.top/kk? 就會自動找到main控制器的bb方法,也就實現了我們的目的。
?
注:領取阿里云優惠券、推薦碼(附使用教程):http://www.aliyouhui.top
?
?