apache的重写规则

Posted 糯米糊糊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache的重写规则相关的知识,希望对你有一定的参考价值。

  • .htaccess

    .htaccess叫分布式配置文件,.htaccess文件的作用在于当浏览器通过uri访问到服务器某个文件夹或文件时,我们可以决定这个uri是否访问uri指定资源或者拒绝访问。

  • 重写配置开启
  1. 让服务器加载rewrite.so模块
  2. 配置vhost站点时候,将此参数AllowOverride配置成all.
    AllowOverride all
    

      

  3. 在项目根目下必须有.htaccess文件
    <IfModule mod_rewrite.c>
      Options +FollowSymlinks -Multiviews
      RewriteEngine On
    
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
    </IfModule> 
    

      

  • 重写和重定向区别
    1. 重写是同域名下改写访问路径,重定向是不同域名之间
    2. 重写是服务器端改写路径,不返回到浏览器。重定向需要返回给浏览器,让浏览器访问。
    3. 重写对SEO优化没有效果,重定向有。
  • 基本语法介绍
【说明 】定义重写发生的条件
【语法】 RewriteCond 【TestString】 【CondPattern】 [flags]
【作用域】 server config, virtual host, directory, .htaccess
【覆盖项】 FileInfo
【状态】 扩展(E)
【模块】 mod_rewrite
  1. CondPattern基本是正则匹配,正则匹配时候"!"感叹号表示否定含义。
  2. 纯字母对比
2.1>(词典顺序的小于)   ‘<CondPattern’
    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString小于CondPattern则为真。
2.2>(词典顺序的大于)  ‘>CondPattern’
    将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString大于CondPattern则为真。
2.3>(词典顺序的等于)  ‘=CondPattern’
  将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString等于CondPattern(两个字符串逐个字符地完全相等)则为真。
2.4>(为空判断) ""
   如果CondPattern是”"(两个双引号),则TestString将与空字符串进行比较。

  3.目录文件的测试

3.1> ‘-d’(目录)
    将TestString视为一个路径名并测试它是否为一个存在的目录。
3.2> ‘-f’(常规文件)
    将TestString视为一个路径名并测试它是否为一个存在的常规文件。
3.3> ‘-s’(非空的常规文件)
    将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
3.4> ‘-l’(符号连接)
    将TestString视为一个路径名并测试它是否为一个存在的符号连接。
3.5> ‘-x’(可执行)
    将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
3.6> ‘-F’(对子请求存在的文件)
    检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
3.7> ‘-U’(对子请求存在的URL)
    检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!

  

[flags]
语句	含义
R	强制外部重定向;R=301 永久重定向、R=302 临时重定向
F	禁止URL,返回403 http状态码
G	强制URL为GONE,返回410 http状态码
P	强制使用代理转发
L	表明当前规则是最后一条规则,停止分析以后的规则重写
N	重新从第一条规则开始运行重写过程
C	与下一条规则关联
T=MIME-type(force MIME type) 强制MIME类型
NS	只是用于不是内部的子请求
NC	不区分大小写
QSA	追加请求字符串
NE	不再输出转义特殊字符 %3d$1 等价于 =$1

  

TestString是一个纯文本的字符串,但是还可以包含下列可扩展的成分:
1、RewriteRule反向引用 ,引用方法是:$N (0 <= N <= 9)引用当前(带有若干RewriteRule指令的)RewriteCond中的与Pattern匹配的分组成分(圆括号!)。
2、RewriteCond反向引用 ,引用方法是:%N (1 <= N <= 9)引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。
3、RewriteMap扩展 ,引用方法是:${mapname:key|default} 细节请参见RewriteMap 指令。

 

  • 环境变量

 

 

  • 暂时
  • 参考

《.htaccess 基础教程(四)Apache RewriteCond 规则参数》 http://www.cnblogs.com/52php/p/5670199.html

以上是关于apache的重写规则的主要内容,如果未能解决你的问题,请参考以下文章

Apache URL重写规则

Apache用参数重写规则?

apache重写规则可以进入httpd.conf吗

Apache 多重重写规则

花括号( 和 )从 Apache 到 Nginx 重写规则。

使用 apache 重写规则的问题