下面收集整理学习过程中碰到的实例,方便自己理解,也希望大家能够交流指正.
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
]]>