方林

再多的天才也无法胜过对细节的关注
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Apache Rewrite 伪静态配置

Posted on 2012-05-26 23:06  fl_dream  阅读(259)  评论(0编辑  收藏  举报

一.首先来看下mod_rewrite简介和配置
    Rewrite主要功能就是实现URL的跳转和隐藏真实地址,其实还有另一个重要功能就是sef(Search Engine Friendly),基于Perl正则表达式规范。可以帮助我们实现 伪静态、 伪目录、域名跳转、防盗链等。
    1. 伪静态举例:
     比如一个普通的地址为:www.xxx.com/test.php?id=2
     可以转成: www.xxx.com/test_2.html 或 www.xxx.com/test_2/
   
     2.如何开启mod_rewrite,Apache该如何配置呢?
        首先启用rewrite
        # LoadModule rewrite_module modules/mod_rewrite.so
        去除前面的 #
        LoadModule rewrite_module modules/mod_rewrite.so
        AllowOverride None    修改为: AllowOverride All
         之后启用.htaccess,一般放在网上根目录中,并定义规则,当然这个规则也可以直接写在httpd.conf中。

二.mod_rewrite规则的使用
   案例1:
    RewriteEngine on    #启动rewrite
    RewriteCond %{HTTP_HOST}   !^www.xxx.com [NC]     #如果头部不等于www.xxx.com,则匹配下面规则 ,NC表示不区分大小写
    RewriteRule ^/(.*) http://www.xxx.com/ [L]                   #即上面不匹配,则跳转到www.xxx.com
    这个通常也是一个基本的防盗链的一个方法

   案例2:  伪静态
   RewriteEngine on     //启动rewrite
   RewriteRule ^/test([0-9]*).html$  /test.php?id=$1
   RewriteRule ^/new([0-9]*)/$     /new.php?id=$1 [R]
   前面红色部分与后面的红色部分相对应,会被替换。

三. mod_rewrite规则修正符
     R 强制外部重定向                          -->即最终会跳到真实地址
     F 禁用URL,返回403HTTP状态码       -->即匹配成功,即返回403状态码无权限访问
     G 强制URL为GONE,返回410状态码。-->告诉搜索引擎,即让搜索引擎无需再来访问这个地址
     P 强制使用代理转发
     L 表明当前规则是最后一条规则,停止分析以后的规则  --> 也即如果匹配到,则停止分析其后面的规则
     N 重新从第一条规则开始运行重写过程。
     C 与下一条规则关联。---->可能一条规则完成不了,需要与下一条规则配合使用

     如果规则匹配则正常处理,以下修正符无效:
     T=MIME-TYPE(force MIME type)强制MIME类型
     NS 只用于不是内部子请求
     NC 不区分大小写
     QSA 追加请求字符串
     NE 不在输出转义特殊字符   \%3d$1等价于=$1

 

     PS:基本上粗部分为最正常使用的。