1. 概述
- 在项目中使用ThinkPHP框架,发现使用该框架还能简化URL地址,如:
http: //localhost/index.php/Home/Index/search
可以转换为:
http: //localhost/search
2.操作环境
- 操作系统:Ubuntu 14.04.3 LTS
- 框架:ThinkPHP 3.2.3
- Web服务器:Apache2.4.10
3.步骤
3.1 URL模式设置
- 需要在ThinkPHP中的应用配置文件中设置(默认为1):“URL_MODEL”=>2
将ThinkPHP设置为REWRITE模式
3.2 重写规则的定义
- 在Apache下面的话,在入口文件index.php同目录下,建立.htaccess文件,添加如下内容:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>
3.3 绑定模块与控制器
- http: //localhost/index.php/Home/Index/search中:
- index.php:入口文件
- Home:模块
- Index:控制器
- search:方法
- 因此需要将Home模块、Index控制器与index.php入口文件绑定,从而进入index.php文件则默认进入/Home/Index中。绑定代码如下:
index.php
<?php
define('BIND_MODULE','Home');
define('BIND_CONTROLLER','Index');
- 实现效果为 http: //localhost/index.php/search
3.4 配置Apache2
- 需要设置Apache2支持 .htaccess文件,首先使Apache2支持 mod_rewrite.so模块
终端运行:sudo a2enmod
输入:rewrite
- 修改/etc/apache2/apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All //修改这一行
Require all granted
</Directory>
- 重启Apache2,即可支持ThinkPHP中的REWRITE模式
- 实现效果为 http: //localhost/search,大功告成!
4.补充说明
- 简化URL地址后,其原理是/Home/Index/search方法被绑定到入口文件index.php中。此时search方法中所处的目录为index.php的所在目录,而不是其物理目录“/Home/Controller/”中,所以之后在search方法中需要指定路径时,“./”路径代表的是与index.php所处的同一路径,而不是“/Home/Controller/”。
参考资料
http://document.thinkphp.cn/manual_3_2.html#url
http://my.oschina.net/DDDdragon/blog/293873