首页 > 代码库 > apache的rewrite机制
apache的rewrite机制
当我们使用thinkphp的时候,比如说我们访问一个Test控制器的test方法,http://localhost/index.php/Test/test/1.html,那个这个1是用get方式传递的参数,假如这个参数为id,那么我们其实访问的真实地址是http://localhost/index.php/Test/test?id=1.html,用过thinkphp的都知道,其实这个就是伪静态,通过配置tp配置文件的url模式可以实现,但是伪静态的实现,其实也可以用apache的rewrite机制实现
apache的rewrite机制的实现:
比如 http://www.test.com/test.php?type=music&id=100
希望上面的url 变成
http://www.test.com/test-music-id100.html
1.先启用rewrite模块
修改apache中conf目录下httpd.conf文件,找到LoadModule rewrite_module modules/mod_rewrite.so并打开
2.配置虚拟域名
(1)打开apache中conf目录下的vhosts.conf,并引入conf/extra/httpd-vhosts.conf,代码如下
Include conf/extra/httpd-vhosts.conf
(2)修改httpd-vhost.conf文件,代码如下
<VirtualHost *:80>
DocumentRoot "D:/phpstudy/www/test"
<Directory "D:/phpstudy/www/test">
</Directory>
</VirtualHost>
其中
DocumentRoot是网站根目录
Directory配置节点,用于指定该目录下的文件或是图片.的访问权限,也可以设置虚拟主机的错误页面,欢迎页面等
(3)在C:\Windows\System32\drivers\etc目录下的hosts文件,设置ip和主机的对应关系,代码如下
127.0.0.1 www.test.com
(4)访问127.0.0.1 www.test.com/test.php
配置成功!
3.配置rewrite机制
一般来说,httpd-vhost.conf文件是不能让我们程序员随便配置的,所以我们可以使用.htaccess文件进行配置
(1)修改httpd-vhost.conf文件,开启用.htaccess文件去匹配规则,代码如下
allowoverride all
(2)在网站根目录建立.htaccess文件,代码如下
<IfModule rewrite_module>
#rewrite 模块启用
RewriteEngine On
#配置我们的rewrite规则
RewriteRule test-(\w+)-id(\d+)\.html$ test.php\?type=$1\&id=$2
</IfModule>
其中rewriteRule使用正则表达式来匹配的,匹配的部分是域名后面的字符串,也可以同时配置多个规则(RewriteRule)
(3)重启apache并测试(注意,只是修改.htaccess是不需要重启apache的)
php代码
测试结果
关于Directory其实还有许多常用的配置的,因为这次主要是记录伪静态的实现,所以等下次有时间的话我会继续整理一份关于Directory的常用配置
apache的rewrite机制