mod_rewrite 模块学习+测试实例

下面收集整理学习过程中碰到的实例,方便自己理解,也希望大家能够交流指正.

1.RewriteBase

RewriteBase指令显式地设置了目录级重写的基准URL。

例:在服务器上虚拟一个microsea的目录这个microsea目录不存在,它对应真实服务器的/home/httpd/html

希望的效果:http://10.10.10.10/microsea/index.html重写为http://10.10.10.10/go.html则有两步:

(1).在httpd.conf下

DocumentRoot /home/httpd/html

ServerName 10.5.17.167

alias /microsea /home/httpd/html

Options FollowSymLinks

AllowOverride All


(2).在/home/httpd/html/.htaccess文件中:

RewriteEngine on

RewriteBase /microsea

RewriteRule ^index\.html$ go.html
2.RewriteCond

定义重写发生的条件

语法:RewriteCond TestString CondPattern [flag]

3.RewriteMap

定义用于关键词查找的映射函数

语法: RewriteMap MapName MapType:MapSource

4.RewriteRule

为重写引擎定义规则

语法:RewriteRule Pattern Substitution

测试实例:将http://10.10.10.10/abc 跳转到http://10.10.10.10/m/?abc

.htaccess文件内容:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^(.+)\.(.+)$

RewriteRule ^(.+[^/])$ http://10.10.10.10/m/?$1
说明: RewriteCond条件判断获得的URI是否符合规定,%{REQUEST_URI}获得的内容为/abc

注意是URI不是URL.

!^(.+)\.(.+)$ !表示否定, ^(.+)\.(.+)$正则表达式,表示xxx.xxx格式的文件,如abc.html或abc.php

整句的意思是判断用户访问http://10.10.10.10/abc时传输到服务器的/abc的内容是否是xxx.xxx的文件,不是则做RewriteRule的动作.是则不满足条件,如用户访问的是http:/10.10.10.10/abc.php这不做跳转动作.

^(.+[^/])$ 正则表达式判断URI是否最后带/ ,如果带/也不做跳转.

转载 http://www.givingtree.com.cn/category/%E8%B5%84%E8%AE%AF%E7%81%AB%E8%8D%AF%E5%BA%93?page=5

]]>

© 版权声明
THE END
喜欢就支持以下吧
点赞0 分享