url美化

目的:

http://localtest/yii/web/index.php?r=hello/index

美化成:

http://localtest/yii/web/hello/index

这里我是用的wampserver新建了一个localtest站点(详情可点击这里点击这里),并将yii的basic文件夹重新命名为yii。

对比上面的两个地址,其实就是把index.php?r=隐藏。

这里分两步:

1、增加.htaccess文件

在web根目录下增加.htaccess文件,内容为:

RewriteEngine on# 如果是一个目录或者文件,就访问目录或文件RewriteCond %{REQUEST_FILENAME} !-d# 如果文件存在,就直接访问文件,不进行下面的RewriteRuleRewriteCond %{REQUEST_FILENAME} !-fRewriteRule . Index.php

无法直接创建.htaccess,可以先创建一个txt文件,然后另存为…,保存为文件名为.htaccess,保存类型选择所有文件即可。

2、配置config/web.php

在config/web.php中的components数组中增加这一项:

'urlManager' => [// //开启url美化'enablePrettyUrl' => true,// //隐藏index.php'showScriptName' => false,// //禁用严格匹配模式'enableStrictParsing' => false,// //url后缀名称// 'suffix'=>'.html','rules' => [],],

这时,可以将URL中的index.php?r=删除,如果出现404报错,可以查看服务器的配置,我用的是wampsever中集成的apache,需要检查一下配置:

conf\httpd.conf中,开启 apache 的 mod_rewrite 模块
去掉LoadModule rewrite_module modules/mod_rewrite.so前的“#”符号;

然后修改 apache 的 AllowOverride
将 AllowOverride None 修改为 AllowOverride All;

由于我是在conf\extra\httpd-vhosts.conf中配置了站点,所以需要同步去httpd-vhosts.conf中将对应站点的AllowOverride None 修改为 AllowOverride All;

至此,我就可以用http://localtest/yii/web/hello/index
来访问http://localtest/yii/web/index.php?r=hello/index

适配ajax请求路径

由于我用Yii框架主要进行一些服务端的逻辑处理,例如接口以及session管理等,由于要做到前后端分离,Yii主要还是给前端提供API。这里我先写一个简单的例子测试一下上面美化之后的url是否适用于我们常用的ajax。

先在web目录下新建了一个index.html文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>text</title>
</head>
<body><h1>test</h1>
</body>
<script type="text/javascript" src="lib/jquery-2.0.3.min.js"></script>
<script type="text/javascript">
$(function(){$.ajax({type : 'GET',url : 'hello/resp',data: {age: 12,name: 'sean'},success : function(response){console.log(JSON.parse(response) );}});
});
</script>
</html>

为了方便,这里我就直接引用了jquery封装好的ajax方法,可以注意到,我这里用的url : ‘hello/resp’。

对应的在HelloController中加了这么个方法:

public function actionResp(Type $var = null){$request =  Yii::$app->request;$age = $request->get('age');$name = $request->get('name');$arr = array('age' =>$age , 'name'=>$name);$response = json_encode($arr);return $response;}

在浏览器中,可以得到正确的返回值:

可以注意到url的地址为http://localtest/yii/web/hello/resp,这其实就是我们上面美化后的地址。

为了进一步测试相对路径的问题,我们在web下新建了一个test文件夹,并在其中新增了一个test.html文件:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>text</title>
</head><body><h1>test</h1>
</body>
<script type="text/javascript" src="../lib/jquery-2.0.3.min.js"></script>
<script type="text/javascript">$(function () {$.ajax({type: 'GET',url: 'hello/resp',data: {age: 12,name: 'sean'},success: function (response) {console.log(JSON.parse(response));}});});
</script></html>

内容与index.html一致(jquery路径做对应的变化),浏览器中访问后,ajax请求报404:

可以注意到,此时ajax请求的地址为http://localtest/yii/web/test/hello/resp的,请求是在web/test下,不是之前的web/目录,稍微变通一下,修改一下url: '../hello/resp',再次访问就可以了。

至此我们基本上可以知道了,通过我们的URL美化,我们可以将发送到web/下的请求,转发到index.php中,所以需要保证我们的请求发送到了web目录下。但是,如果按照上述的方法,每一个ajax请求都手动去计算和更改对应的url肯定是不合理的,因此可以封装一个公共方法。

如果我们的前端代码都是放在web目录下,那么可以在web下新建一个公共js文件,里面写一个获取web路径方法即可:

function getLocalUrl() {var url = '';var str =  window.location.href;try{url =  str.split('web/')[0] + 'web/';}catch(e){}return url;}

这样,上述的test.html文件可以引入这个方法,url的方法就可以改写成:

url: getLocalUrl() + 'hello/resp',

这样,每次调用的时,直接调用getLocalUrl()方法即可,不需要在人为计算路径。

同理,如果如果前端代码和后端php代码分开不同路径部署,也可以根据自己具体的项目路径来获取到web路径。

Yii框架url美化相关推荐

  1. yii框架,美化路由

    1.http://127.0.0.1/yii2/yii/frontend/web/index.php安装完成yii的路由 2. 添加这个文件之后路由:http://127.0.0.1/yii2/yii ...

  2. php yii路由规则,Yii框架的路由配置方法分析

    本文实例讲述了Yii框架的路由配置方法.分享给大家供大家参考,具体如下: 取消index.php 这两种方法都是在自动添加index.php 方法一:使用.htaccess 添加.htaccess文件 ...

  3. PHP开发框架之YII框架学习——碾压ThinkPHP不是梦

      前  言 JRedu 程序猿是一种慵懒的生物!能少敲一行代码,绝对不会多敲一个字符!所以,越来越多的开发框架应运而生,在帮助我们完成功能的同时,极大程度上也帮我们节省了人力物力,而且也提高了系统的 ...

  4. Yii框架中使用SRBAC作为权限管理模块时遇到的问题

    Yii框架中使用SRBAC作为权限管理模块时遇到的问题 Yii框架中使用SRBAC作为权限管理模块时遇到的问题 看到Yii中提供RBAC的插件,SRBAC,就想用用. 结果按照手册上的安装办法,整来整 ...

  5. php+yii手册下载,yii中文手册-yii框架中文手册教程下载pdf格式免费版-东坡下载

    本节内容小编为大家精选带来的是pdf格式免费版yii框架中文手册教程下载文档,如果你需要一份yii框架中文手册或是一份yii框架教程,那么点击本文下方相应的下载地址下载这份"yii框架中文手 ...

  6. yii框架相关知识(转)

    2019独角兽企业重金招聘Python工程师标准>>> db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示s ...

  7. php事件和行为,Yii框架组件和事件行为管理详解

    Yii框架组件和事件行为管理详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Yii框架组件和事件行为管理详解.txt ] (友情提示:右键点上行txt文档名- ...

  8. Yii框架特点及测试考虑

    1. 简介 Yii 是一个基于部件.用于开发大型 Web 应用的高性能 PHP 框架.它将 Web 编程中的可重用性发挥到极致,能够显著加速开发进程.Yii(读作"易")代表简单( ...

  9. Yii 框架学习--01 框架入门

    Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...

最新文章

  1. 【RecyclerView】 十五、使用 ItemTouchHelper 实现 RecyclerView 拖动排序 ( ItemTouchHelper 简介 )
  2. 2.OD-C++的虚函数表遍历
  3. TensorFlow学习笔记(十四)TensorFLow 用mnist数据做classification
  4. 步骤5 - Orchestra从微服务提供商获得结果,再发送回WebSocket服务器
  5. iPhone6和iPhone6 plus的iOS8设计尺寸参考指南
  6. 免费使用的支付宝,到底是怎么一年赚1206亿的?
  7. python基本语法:序列
  8. centos7装单机hadoop2.7.3
  9. Address already in use: JVM_Bind 8083端口被占用的几个解决办法
  10. python人工自动抠图_python实现人工智能Ai抠图功能
  11. java自己实现linkedlist_自己根据java的LinkedList源码编写的一个简单的LinkedList实现...
  12. win7c语言命令行编译,易语言命令行编译工具
  13. RFC2544性能测试
  14. linux c++ opencv4安装指南
  15. 关于刚毕业的程序员考取mba
  16. 十、InnoDB的Buffer Pool
  17. padavan手动安装php
  18. 电脑城 Ghost XP SP3 笔记本专用版 2012.10
  19. 系统备份和还原(固态系统盘)
  20. 【地理人工智能交叉】通过整合兴趣点和Word2Vec模型感知城市土地利用的空间分布

热门文章

  1. 【哈佛积极心理学笔记】第7讲 逆境还是机遇
  2. 谷歌中国大裁员赔偿 N+9?不,结果比这更离谱。。。
  3. Apollo 开放平台 - 阿波罗开放平台
  4. NAT和代理服务器的原理及应用
  5. 建设经验|智慧水务管控平台-智慧供水综合运营平台
  6. 10个有趣python模块
  7. srvctl 在oracle下运行,Oracle RAC中Srvctl命令详细说明文档
  8. 概述:隐式神经表示(Implicit Neural Representations,INRs)
  9. 最全SparkStreaming实践
  10. 这个医生说的防疫措施,我挺认可的