mod_rewrite使用详解


 一、什么是mod_rewrite?
 很多人可能知道这种技术,通常的用途是将一个动态的URL模拟为一个静态的URL,更好的供搜索引擎收录,这就是rewrite技术,当然它的功能不仅限于此。在这里,主要介绍apache中的rewrite功能。
 引用apache手册中的一句话:“欢迎来到mod_rewrite, URL操作的瑞士军刀!”, apache中的mod_rewrite主要是用来处理URL操作的,此模块从1997年7月起为Apache Group中的附加模块。关于apache, 详细资料请查看http://www.apache.org


 二、如何启动mod_rewrite支持?
 由于mod_rewrite是apache所附加的模块,apache在默认安装时不会添加这个模块,在windows中,可以通过修改httpd.conf文件来激活它,linux环境中则要在编译apache时加一条激活指令,具体方式为:
 1. windows环境:
  打开httpd.conf, 查找"#LoadModule rewrite_module modules/mod_rewrite.so", 将前边的#号去掉,保存httpd.conf, 重启apache, 激活mod_rewrite;
 2. linux环境:
  安装apache时使用这样的方式: "./configure --prefix=/usr/httpd2 --enable-so --enable-rewrite", --prefix指定安装后的目录,--enable-so指激活so模式, --enable-rewrite就是加入mod_rewrite支持了。
 
 注意:
  在windows下进行设置rewrite技术时保证你的PHP是以LoadModule的形式而不是CGI的模式载入的,以LoadModule模式加载的PHP配置文件在httpd.conf中像这样:
[php]
LoadModule php5_module "c:/php5.2/php5apache2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "C:/php5.2"
[/php]
 
 三、开始体验
 先从最简单的功能开始来。先说明测试环境, 项目名称为rewrite_app:
[php]
+rewrite_app
   -test1.html
   -vhost.txt
[/php]
 注意,这里我们并没放置下边要访问的1.html文件,vhost.txt中是httpd.conf中虚拟服务器的配置文件。

 在httpd.conf里加入一个虚拟主机, 配置段位于httpd.conf尾部,当然,你要提前配置好php环境。虚拟服务器配置段像这样:
[php]
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot d:/phpsaf #改成你自己工程目录
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common

    RewriteEngine on ##1.
    RewriteRule ^/1.html$ /test1.html ##2.

</VirtualHost>
[/php]
其实这段在apache中已经存在了,不过是以#注释掉了,你把每一行前边的#去掉, 然后再加入1, 2处即可完成最简单的rewrite配置,保存后重启apache, 然后在浏览器中输入http://localhost/1.html, 这时我们会看到test2.html中的内容,一个最简单的rewrite功能完成了.
 来看看两种配置选项的作用:
 RewriteEngin: on表示在本虚拟主机中启用rewrite技术,off表示关闭这一功能。
 RewriteRule: 这就是具体的rewrite规则了, 它的值分为两段, 第一段表示要匹配的模式,第二段表示匹配完成后要rewrite的页面,第一段为一个正则表达式,表示匹配以"/1.html"为开始并且结束的请求,当然也就是严格匹配http://localhost/1.html了,匹配完成后rewrite到http://localhost/test1.html页。在测试中你会发现在虽然已经rewrite到了test1.html,但URL中还是1.html, 当我们在RewriteRule这一句的最后再加入 [R]时后保存并重启后,再测试刚才的地址,就会发现它直接转到http://localhost/test1.html了,而且是连url也变了。加入[R]选项后的配置段像这样:
RewriteRule ^/1.html$ /test1.html [R]

 

另附参考:

 

mod_rewrite 详解

http://httpd.apache.org/docs/mod/mod_rewrite.html

http://www.3389hack.com/xueyuan/fuwuqi/linux/25054.html


你可能感兴趣的:(apache,mod_rewrite)