张吉 2014-03-10
一、Rewrite规则简介:
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
二、在Apache配置中启用Rewrite
打开配置文件httpd.conf:
代码如下:
1.启用rewrite # LoadModule rewrite_module modules/mod_rewrite.so 去除前面的 # 2.启用.htaccess 在虚拟机配置项中 AllowOverride None 修改为: AllowOverride All
代码如下:
RewriteEngine on //启动rewrite引擎 RewriteRule ^/index([0-9]*).html$ /index.php?id=$1 //“([0-9]*)” 代表范围 用(.*)代表所有,下同。 RewriteRule ^/index([0-9]*)/$ /index.php?id=$1 [R] //虚拟目录
代码如下:
RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理 Alias /def /ghi
四、Apache rewrite例子
例子一:
同时达到下面两个要求:
1.用//www.jb51.net/xxx.php 来访问 //www.jb51.net/xxx/
2.用http://yyy.jb51.net 来访问 //www.jb51.net/user.php?username=yyy 的功能
代码如下:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.jb51.net RewriteCond %{REQUEST_URI} !^user.php$ RewriteCond %{REQUEST_URI} .php$ RewriteRule (.*).php$ //www.jb51.net/$1/ [R] RewriteCond %{HTTP_HOST} !^www.jb51.net RewriteRule ^(.+) %{HTTP_HOST} [C] RewriteRule ^([^.]+).jb51.net //www.jb51.net/user.php?username=$1
例子二:
代码如下:
/type.php?typeid=* C> /type*.html /type.php?typeid=*&page=* C> /type*page*.html RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT] RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]