apache mod_rewrite模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数据库。
使用此模块的条件
1.在apache的httpd.conf里开启LoadModule rewrite_module modules/mod_rewrite.so即把前面的 ‘#’去掉
如果有操作httpd.conf的权限可以直接在httpd.conf里配置,但多是在网站目录下.htaccess文件里配置
如果在.htaccess里配置需开启支持.htaccess
AllowOverride All使.htaccess文件生效
12 Options indexes FollowSymlinks3 AllowOverride All4 Order allow,deny5 Allow from all6
第二行有indexes的话是允许列出目录文件,没有或者-indexes则表示不允许列出目录文件
示例目录结构
re在apache根目录下
re下demo文件
1 ";4 echo "re下的demo";5 echo "
";6 echo $_SERVER['PHP_SELF'];7 ?>
r1,r2下demo和demo一样,只是第四行分别为"r1下demo","r2下demo"标志
error.html文件里代码也只是标志各自位置
.htaccess文件
12 RewriteEngine On3 RewriteBase /re/4 5 RewriteCond %{HTTP_HOST} localhosT [NC]6 RewriteRule demo(\d+)\.html demo.php?id=$1 7 8 ErrorDocument 404 error.html9
其中RewriteBase+demo.php是真实文件存在位置,如果没设置此项则以.htaccess文件所在目录为基准
如果按以上的.htaccess
访问:
结果:
要访问的demo1.html是以.htaccess所在目录为基准
访问个不存在的目录里的
将会访问到当前RewriteBase下的error.html文件
若
若 改为:RewriteBase /re/r1
若:
当不匹配时
ErrorDocument 404 error.html去找当前RewriteBase 下的error.htmlRewriteCond %{HTTP_HOST} localhosT [NC]这句时匹配前的判断条件如果%{HTTP_HOST} 是localhost就进行下面的RewriteRule[NC]表示不区分大小写 注意localhosT,[NC]两者之间有空格本文只是作些简单的实例演示,更多内容请查看apace手册相关内容!