# (6)URL优化
#### 1. 隐藏index.php
即隐藏入口文件,官方链接,打开翻到最下面就能看到了:[http://www.kancloud.cn/manual/thinkphp5/118012,](http://www.kancloud.cn/manual/thinkphp5/118012%EF%BC%8C) 最新版本的框架写的小项目都是不需要index.php就能访问下去的,例如http://127.0.0.1/tp5/public/index/login/login 也能访问到登录界面,而我们主要做的就是怎么配置,让url看起来更简洁,最好是http//:域名/方法名,这种访问方式。
#### 2. apache配置
这里我做的是加一个端口来做,本地的80 端口我在用
- 首先找到httpd-vhosts.conf,我这里的绝对路劲D:/wamp64/bin/apache/apache2.4.18/conf/extra/httpd-vhosts.conf
- 然后在这个文件里面加上下面的代码
```
<VirtualHost *:8081>
ServerName localhost
DocumentRoot D:/wamp64/www/tp5/public
<Directory "D:/wamp64/www/tp5/public/">
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
```
- 然后再在D:/wamp64/bin/apache/apache2.4.18/conf/original/httpd.conf文件下面加一个端口,Ctrl+f查找Listen,大概在下面代码的位置,我加了一个Listen 8081,然后重启apache,
```
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 0.0.0.0:80
Listen [::0]:80
Listen 8081
Listen 8080
```
- 接下来你再访问http://127.0.0.1:8081/index/login/login, 也能进入到你的登录界面,但是我这个里面,样式文件竟然丢了,这是因为之前在配置文件里面写的是:`
```
<?php
return [
"web_root" => "/tp5/public/static/",
"web" => "/tp5/public/index.php/",
'session' => [
'auto_start' => true,
'name' => 'login@',
'expire' => 1800, /*时间长度*/
],
];
```
现在需要把 "web\_root" => "/tp5/public/static/",改为 "web\_root" => "/static/",这样样式又回来了,到这里很多小伙伴肯定会想,与其在配置里面这样写,还不如不写,直接将模板文件的
```
<link rel="stylesheet" type="text/css" href="{$Think.config.web_root}css/main.css">
```
改为
```
<link rel="stylesheet" type="text/css" href="/static/css/main.css">
```
,这里,我也是这样改的,看起来会更舒服一点。
- 到这里,其实127.0.0.1:8081就是ServerName,也就是以后你的网址,后面的/index/login/login感觉还是太长了,这里还可以精简,很多小伙伴到这里都会想到官方的绑定模块名,绑定控制器名,因为这里是单一模块,确实可以这样做,但是控制器不唯一,所以点到为止。
- 我理想的访问最简单的就是网址后面加一个方法名就能看到页面,即ServerName/方法名。所以接下来在application/route.php文件下面加上一条配置:
```
"login"=>"index/login/login"
```
然后我就可以直接用方法名访问登录界面了:<http://127.0.0.1:8081/login> ,由于thinkphp路由的唯一性,只要写了这条配置,你再访问http://127.0.0.1:8081/index/login/login 反而会报错呢,在这里留心一下就可以了。
- 其实这个url我还是觉得不是很舒服,我想现在就看到网址加方法名的效果,[比如说thinkphp.com/login](http://xn--thinkphp-jo1ot97lz3ze.com/login) ,没问题,这都是小事。
- 打开D:/wamp64/bin/apache/apache2.4.18/conf/extra/httpd-vhosts.conf,就是上面的那个文件,再加上一段代码:(看到端口号又变成了80端口,ServerName变成了 [thinkphp.com](http://thinkphp.com))
```
<VirtualHost *:80>
ServerName thinkphp.com
DocumentRoot D:/wamp64/www/tp5/public
<Directory "D:/wamp64/www/tp5/public/">
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
```
- 再用编辑器打开C:\\Windows\\System32\\drivers\\etc\\hosts,在最下方加上一条127.0.0.1 [thinkphp.com](http://thinkphp.com),保存,重启apache
- [http://thinkphp.com/login,](http://thinkphp.com/login%EF%BC%8C) 我再在浏览器中输入就能访问到登录界面了 .
- 但是这里你会发现,无论是输入输入密码错误,或者是输入验证码错误,都跳转不回登录界面,并且就算你密码跟验证码都输入对了,还是不行,憋着急,都是简化URl惹的祸,我带你改几个地方就好了(找到问题就好解决,既然跳转不行,就找有跳转的地方):
首先:controller/Login.php的logining方法改为,对比前后看变化
```
public function logining()
{
$name = input('request.name');
$password = input('request.password');
$data = input('request.captcha');
if(!captcha_check($data)){
//验证失败
return $this->error("验证码错误","location:/login");
};
$check=\app\index\model\Admin::login($name, $password);
if ($check) {
header(strtolower("location:/admin"));
exit();
}else{
return $this->error("用户名或密码错误","location:/login");
}
}
```
然后就OK啦。
### 总结:
- 现在你可以访问http://127.0.0.1:8081/login 或者http://thinkphp.com/login 访问到你的登录界面,另外我再补充几个路由配置,在route.php里面:
```
<?php
/****
@author:1132w11
2016.10.25 14:02;
****/
return [
'__pattern__' => [
'name' => '\w+',
],
'[hello]' => [
':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
':name' => ['index/hello', ['method' => 'post']],
],
"login"=>"index/login/login", //登录页面
"logining"=>"index/login/logining", //登录页面
"/"=>"index/index/index", //默认首页
"admin"=>"index/admin/admin", //后台页面
"changepsw"=>"index/admin/changepsw", //修改密码页面
"logout"=>"index/admin/logout", //退出登录
"changepassword"=>"index/admin/changepassword", //修改密码
];
```
这里要保证方法名的唯一性。简单一点就是每个控制器每个方法都要写一遍!后面再优化这个route.php
温馨提示:在每一个跳转动作的时候,一定要注意路径中前面的斜杠"/"是否要加,如果加了斜杠导致跳转不过去或者报错,尝试去掉一下!项目中跳转主要出现在a标签的url、form表单提交的action还有success跟error判断处。
- 序言
- API开发实例
- 群文件,给萌码新的福利
- 一、登录(新增视频演示:第五节)
- (1)新建数据库
- (2)模板制作
- (3)MVC架构
- (4)config配置
- (5)功能实现及源码
- (6)URL优化
- (7)快速布置源码在电脑上
- 二、留言板
- (1)新建数据库
- (2)前端制作
- (3)MVC处理数据
- (4)功能实现及源码
- 三、API接口的调用
- (1)自制109新闻API
- (2)聊天机器人API
- (3)curl原理
- 四、文件上传
- (1)官网例子讲解
- (2)上传显示进度条
- 五、分页
- (1)简单分页
- (2)细说分页
- 六、增删改查(软删除)
- (1)单张表CURD
- (2)关联CURD
- (一)一对一关联CURD
- (二)一对多关联CURD
- (三)多对多关联CURD
- 七、二维码生成
- 八、Ajax调用
- 九、ico
- 十一、ckeditor富文本编辑器
- 十二、3分钟搭建服务器
- 十三、微信公众号开发
- (1)填写服务器配置
- 十四、自定义标签alert
- 十五、遍历二级菜单
- 十六、权限管理
- 十七、Thinkcmf分页样式优化
- 番外篇、红烧鲫鱼
- 第二期更新公告