一、场景介绍:
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