博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
路由的设计与重写(上)
阅读量:7210 次
发布时间:2019-06-29

本文共 1922 字,大约阅读时间需要 6 分钟。

hot3.png

    路由作为网站设计的时候,非常关键的一环,一般了为了对搜索引擎更加友好,需要直接将index.php?a=1&b=2这种进行路由转换。这里先从最简单的$_SERVER开始,对网站路由进行解析。示例:
http://127.0.0.1/index.php/dede/deafa/?s=/Admin/Index/index.html    
     PHP里路由识别的俩个关键性参数
     $_SERVER['PATH_INFO']  获取脚本后面,查询字符串前面的字符串
     $_SERVER['QUERY_STRING'] 获取查询字符串
    如果以示例代码进行演示得到的结果分别是:
   $_SERVER['PATH_INFO']='/dede/deafa/'
   $_SERVER['QUERY_STRING']='s=/Admin/Index/index.html'
     其中query_string里的参数是可以直接通过get方式获取到对应值的
     $_GET['s'] 就可以直接提取到/Admin/Index/index.html
   由上面俩个参数,可以得到三种获取路由控制器的思路:
   1.一种比较简单的思路,就是在单入口控制器里直接用get方式传递,
   直接将对应的模型和控制器还有action放入到对应的url里,m,c,a
   到了后台直接$_GET['m'] $_GET['c'],$_GET['a']
   直接用参数驱动的方式进行访问
   2.第二种思路是通过获取$_SERVER['PATH_INFO']把控制器等方式
   index.php/model/controller/action/这样的路由形式
   通过$_SERVER['PATH_INFO'] 获取到/model/controller/action/这个字符串 trim($_SERVER['PATH_INFO'],"/") 获取到
    $arr = explde("/",trim($_SERVER['PATH_INFO'],"/"),4)
    这样$m=$arr[0];$c=$arr[1];$a=$arr[2],同样获取到了对应的访问方式
   然后(这里有个比较常用的函数
     $m=array_shift($arr);$c=array_shift($arr);$a=array_shift($arr)
     但是不能搞错顺序,获取$arr[0],同时移除 )
   3.第三种思路通过将s=/Admin/Index/index.html的方式进行传递,获取到了s的值后,将其转移给$_SERVER['PATH_INFO']
   然后同样按照第二种方法的逻辑进行值的获取。
    虽然从路由的角度,php里可以设置一部分格式,但是需要将index.html转换成实际访问index.php文件,需要用到apache类的重写规则(重写规则是一个非常有用的功能) 这里先以简单的apache介绍怎么将当url是index.html这种形式转成访问实际地址是index.php
    主要操作有:
    1.打开apache的http.conf文件,找到LoadModule rewrite_module modules/mod_rewrite.so 行,对其进行启用
    2.打开vhost  
      把AllowOverride None 将None改为 All
    3.建立.htaccess文件(在网站的根目录下面),写入以下规则:
     //加载重写模块
     <IfModule mod_rewrite.c>
     //重写引擎开启
    RewriteEngine on
    #检测请求的文件名%{REQUEST_FILENAME}不是目录或者文件就不匹配这#俩条规则
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
  //没有匹配到的所有文件全部重定向到index.php 同时结束这种匹配
    RewriteRule ^(.*)$    index.php [L]
    </IfModule>
    4.重启apache  
     这样直接访问index.html会访问成index.php
     简单重写规则代码:
    

    RewriteEngine on    RewriteCond %{REQUEST_FILENAME} !-d    RewriteCond %{REQUEST_FILENAME} !-f    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]    

转载于:https://my.oschina.net/xiongyuanliang/blog/541944

你可能感兴趣的文章
c#之多线程之为所欲为
查看>>
将SSM架构中原来关于springSecurity3.x版本的写法配迁移到SpringBoot2.0框架中出现的问题解决记...
查看>>
SpringBoot自定义Filter
查看>>
localStorage使用总结,页面跳转,保存值
查看>>
数据结构2 - 线性表
查看>>
[CF Skills]如何在预定的时间运行你的程序
查看>>
matlab练习程序(图像放大/缩小,放大没有进行插值操作)
查看>>
在 C++Builder 工程里调用 DLL 函数
查看>>
JQuery 中简单的几个 类选择器 使用方法
查看>>
Python学习笔记(十)—— 高级特性
查看>>
oracle约束的相关总结
查看>>
解决Eclipse java build path中Web App Libraries无法自动找到WEB-INF的lib目录
查看>>
AjaxPro使用说明
查看>>
金山毒霸专业版高调上线 宣称杀毒速度增3倍
查看>>
PS教程:如何批量处理图片
查看>>
Delphi查询Sqlserver数据库传入日期类型方法总结
查看>>
Windows8(2012) 如何改变登录界面上难看的头像,任意换!
查看>>
超简单将Centos的yum源更换为国内的阿里云源
查看>>
SharePoint 2010 Crawl Component Stuck in “Recovering” status
查看>>
Visual Studio 11预览: 新的编程语言功能
查看>>