PHP中路由和rewrite的使用

一、场景介绍:

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方法,也就实现了我们的目的。

注:领取阿里云优惠券、推荐码(附使用教程):https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80767545

猜你喜欢

转载自blog.csdn.net/m_nanle_xiaobudiu/article/details/81406982