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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《NoSQL权威指南》导读

引言 NoSQL权威指南“没有什么会比引入新秩序更难,因为创新者必须要面对那些在旧环境中已经做得很好的对手,以及那些在新环境中做得很好的冷漠者。” ——Niccolo Machiavelli [1] 在过去的几十年,我已经通过Elsevier/Morgan Kaufmann出版社出…

PHP开发常见功能实现流程

一、pc端网站登录 1、获取并过滤用户提交的用户名和密码以及验证码 2、验证用户提交验证码和session中的验证码是否一致 3、验证用户名是否存在 4、根据用户名获取密码,并校验密码是否一致 5、密码一致,则登录成功,跳转到对应的首页 图示…

七牛直播云服务技术揭秘

以下根据七牛云首席布道师何李石现场演讲内容整理。 直播模型及其实现 一个通用的直播模型一般包括三个模块:主播方、服务器端和播放端。 首先是主播方,它是产生视频流的源头,由一系列流程组成: 第一,通过一定的设备来…

golang 标准库间依赖的可视化展示

简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内容,网上也要讨论,但是没有发现直接能拿过来用的.标准库之间,是必然存在依赖关系的,不同库被依赖的程…

《HTML5 2D游戏编程核心技术》——第1章,第1.3节特别功能

本节书摘来自华章出版社《HTML5 2D游戏编程核心技术》一书中的第1章&#xff0c;第1.3节特别功能&#xff0c;作者&#xff3b;美&#xff3d; 戴维吉尔里&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.3 特别功能 Snail Bait游戏有3个特别的功能&a…

XunSearch的安装和加入服务器开机脚本以及将目录写入系统变量

一、安装xunserach 1、cd ~ 2、wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 #下载最新xunsearch包 3、tar -xjf xunsearch-full-latest.tar.bz2 #解压xunsearch包 4、cd xunsearch-full-1.4.11/ #进入xunsearch包目录 5、sh setup.sh #执…

dubbo源码解析-zookeeper创建节点

前言 在之前dubbo源码解析-本地暴露中的前言部分提到了两道高频的面试题,其中一道dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,那发布者和订阅者还能通信吗?在上周的dubbo源码解析-zookeeper连接中已经讲到,这周解析的是另一道,即服务提供者能实现失效踢出是根据什么原…

配置mysql为主主复制步骤

mysql版本&#xff1a;mysql-5.6.24-solaris10-sparc-64bit.tar 操作系统&#xff1a;solaris 11g u10 操作用户&#xff1a;使用非root进行操作安装&#xff0c;a路服务器ip地址为192.168.1.1 b路ip地址为192.168.1.2&#xff08;应改为实际ip地址&#xff09; 1&#xff0c;安…

XunSearch的使用

一、项目的配置文件 1、要想使用xunsearch&#xff0c;首先需要进行配置文件的配置。 默认目录在app下&#xff0c;如下面的结构&#xff0c;每一个搜索项目都需要有一个ini文件进行相应的配置。 举例&#xff1a; project.name novel project.default_charset utf-8 serv…

《VMware vSphere设计(原书第2版)》——1.1 什么是设计

本节书摘来自华章出版社《VMware vSphere设计&#xff08;原书第2版&#xff09;》一 书中的第1章&#xff0c;第1.1节&#xff0c;作者&#xff1a;[美] 福布斯格思里&#xff08;Forbes Guthrie&#xff09;斯科特罗威&#xff08;Scott Lowe&#xff09;肯德里克科尔曼&…

编写高质量代码:改善Java的151个建议四(基本类型)21-30

该书籍PDF下载地址&#xff1a;http://download.csdn.net/download/muyeju/10001473 基本类型有8个&#xff1a;byte&#xff0c;short&#xff0c;int&#xff0c;char&#xff0c;long&#xff0c;double&#xff0c;float&#xff0c;boolean 21.用偶判断&#xff0c;不用奇…

ABP vNext微服务架构详细教程(补充篇)——单层模板(下)

业务代码2聚合服务聚合服务层和基础服务层相同的道理&#xff0c;在Demo.Core.Contracts增加Services文件夹&#xff0c;并添加Notifications子文件夹&#xff0c;在其中添加Dtos文件夹并添加两个DTO与基础服务对应&#xff1a;using Volo.Abp.Application.Dtos;namespace Demo…

PHP 电子商城基本数据表

1、品牌表 tp_brand CREATE TABLE tp_brand (id smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 品牌表,name varchar(60) NOT NULL DEFAULT COMMENT 品牌名称,logo varchar(80) NOT NULL DEFAULT COMMENT 品牌logo,desc text NOT NULL COMMENT 品牌描述,url varcha…

申请成为qq互联个人开发者步骤(注意事项)2018

一、官方网址 官方地址&#xff1a;https://connect.qq.com/manage.html#/ 二、申请时注意事项&#xff1a; 1、申请时的名称栏必须填写身份证上的姓名&#xff0c;否则是不给通过的 2、上传照片时&#xff0c;需要本人手持身份证&#xff0c;重点是照片中身份证上头像的位置要…

《Swift开发实战》——第1章,第1.4节启动iOS 8模拟器

本节书摘来自异步社区《Swift开发实战》一书中的第1章&#xff0c;第1.4节启动iOS 8模拟器&#xff0c;作者 李宁&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.4 启动iOS 8模拟器Xcode是一款功能全面的应用程序&#xff0c;通过此工具可以轻松输入、编译…

《算法导论》读书笔记--第1、2章课后题 (转)

第一章 转自http://www.cnblogs.com/batteryhp/p/4654860.html 思考题 1-1&#xff08;运行时间的比较&#xff09;确定时间t内求解的问题的最大规模。 上面是网上提供的答案。 注意点&#xff1a; 1、最左边一列的是关于n的增长情况描述&#xff0c;值得记住的是这些增长的排…

PHP开发自己的框架必备知识点

一、PHP常用的四种数据结构 简介&#xff1a;spl是php的一个标准库。 官方文档&#xff1a;http://php.net/manual/zh/book.spl.php <?php//spl&#xff08;php标准库&#xff09;数据结构/*** 栈&#xff08;先进后出&#xff09;*/ $stack new SplStack(); $stack-&g…

Linux 环境下 jdk1.8 maven3.2.3 Git2.8.0 安装脚本

2019独角兽企业重金招聘Python工程师标准>>> # Author: peizhouyu # Date: 2018-09-07 14:24:11 # Last Modified by: peizhouyu # Last Modified time: 2018-09-07 16:02:58#!/bin/bash SOFT_PATH/opt/softif [ ! -d $SOFT_PATH ];then mkdir $SOFT_PATH else …

《嵌入式设备驱动开发精解》——导读

前言 嵌入式设备驱动开发精解本书的编写主要是针对从事嵌入式软件开发人员。本书的内容主要涵盖ARM CPU以及各种常用外部设备驱动开发的方方面面&#xff0c;包括各种硬件接口、硬件接口协议说明以及各种外设的使用及调试方法&#xff0c;特别是对于开发调试过程中可能遇到的各…

C# WPF通过WindowChrome自定义窗体

概述在WPF界面开发中&#xff0c;系统默认的窗口比较丑&#xff0c;有时候想自定义窗体&#xff0c;比如微信的客户端窗口这样&#xff1a;使得左边的一块顶到最上端&#xff0c;如下图所示&#xff1a;这时候我们可以 WindowStyle"None"&#xff0c;AllowsTranspare…