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

 

注:领取阿里云优惠券、推荐码(附使用教程):http://www.aliyouhui.top

相关推荐
<p> <span style="font-size:14px;color:#E53333;">限时福利1:</span><span style="font-size:14px;">购课进答疑群专享柳峰(刘运强)老师答疑服务</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;"></span> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>为什么需要掌握高性能MySQL实战?</strong></span> </p> <p> <span><span style="font-size:14px;"><br /> </span></span> <span style="font-size:14px;">由于互联网产品用户量大、高并发请求场景多,因此对MySQL性能、可用性、扩展性都提出了很高要求。使用MySQL解决大量数据以及高并发请求已经是程序员必备技能,也是衡量一个程序员能力薪资标准之一。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了</span><span style="font-size:14px;">「高性能 MySQL 知识框架图」</span><span style="font-size:14px;">,帮你梳理学习重点,建议收藏!</span> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006031401338860.png" /> </p> <p> <br /> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程分为四大篇章,将为你建立完整 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库性能调优、高并发、海量业务处理、面试解析等。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>一、性能优化篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括经典 MySQL 问题剖析、索引底层原理事务与锁机制。通过深入理解 MySQL 索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引使用优化技巧,能够避开很多实战遇到“坑”。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>二、MySQL 8.0新特性篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括窗口函数通用表表达式。企业许多报表统计需求,如果不采用窗口函数,用普通 SQL 语句是很难实现。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>三、高性能架构篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括主从复制读写分离。在企业生产环境,很少采用单台MySQL节点情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构实现是非常有必要。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>四、面试篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">程序员获得工作第一步,就是高效准备面试,面试篇主要从知识点回顾总结角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪工作机会。</span> </p>
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页