Apache规则RewriteCond详解

Apache规则RewriteCond详解
Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了。 RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。
  RewriteEngineon
  RewriteCond %{HTTP_USER_AGENT

大家好,又见面了,我是你们的朋友全栈君。

Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了。

  RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。
   RewriteEngine on
   RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla//5/.0.*
   RewriteRule  index.php            index.m.php
 
   RewriteCond  %{HTTP_USER_AGENT}  ^Lynx.*
   RewriteRule  index.php            index.L.php 

   RewriteRule  index.php            index.b.php
上 面语句的作用是当你是用FF浏览器访问index.php这个文件的时候,会自动让你访问到index.m.php这个文件,当你是用一些移动终端访问的 时候,会让你对index.php这个文件的访问实际访问的是index.L.php去,如果你是用其它的浏览器访问的时候,会让你跳到 index.b.php。在说形象一点,上面的语句就等同于程序里面的下面语句(依PHP语句为例):
        if($_SERVER[‘HTTP_USER_AGENT’] == ‘Mozilla/5.0’)
        {

              //跳转到对index.m.php的访问
        }
        else if($_SERVER[‘HTTP_USER_AGENT’] == ‘Lynx’)
        {

              //跳转到对index.L.php的访问
        }
        else
              //跳转到对index.b.php的访问
 
 在看例2:
        RewriteCond %{HTTP_REFERER} (www.test.cn)
        RewriteRule (.*)$ test.php
上面语句的作用是如果你访问的上一个页面的主机地址是www.test.cn,则无论你当前访问的是哪个页面,都会跳转到对test.php的访问。

在看例三:
       RewriteCond %{REMOTE_HOST} ^host1.* [OR]
       RewriteCond %{REMOTE_HOST} ^host2.* [OR]
       RewriteCond %{REMOTE_HOST} ^host3.*
       RewriteRule (.*)$ test.php
上面语句的作用是如果你的地址是host1或host2或host3的时候,则就跳到对test.php。从这里可以看出,RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来。

下面是自己收藏的一些有用的重写规则:
RewriteCond %{REQUEST_FILENAME} !-f   // 如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)

RewriteCond %{REQUEST_FILENAME} !-d   //#如果目录存在就直接访问目录不进行RewriteRule

RewriteCond %{REQUEST_URI} !^.*(/.css|/.js|/.gif|/.png|/.jpg|/.jpeg)$ //#如果是这些后缀的文件,就直接访问文件,不进行Rewrite

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131318.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于Python缩进,我们该了解哪些?

    关于Python缩进,我们该了解哪些?Python是一门独特的语言,它的代码块是通过缩进(Indentation)来标记的(大部分语言都是使用花括号作为代码块的标记),具有相同缩进的多行代码属于同一个代码块。如果代码莫名其妙的乱缩进,Py

    2022年7月5日
    22
  • cf卡,mmc卡,sd卡,sm卡,xd卡,记忆棒的区别是什么?[通俗易懂]

    cf卡,mmc卡,sd卡,sm卡,xd卡,记忆棒的区别是什么?[通俗易懂]乐乐[学长] CF卡(CompactFlash)CF卡是1994年由SanDisk最先推出的。CF卡具有PCMCIA-ATA功能,并与之兼容;CF卡重量只有14g,仅纸板火柴般大小(43mm×36mm×3.3mm),是一种固态产品,也就是工作时没有运动部件。CF卡采用闪存(flash)技术,是一种稳定的存储解决方案,不

    2022年5月27日
    53
  • 操作系统虚拟存储技术_虚拟存储

    操作系统虚拟存储技术_虚拟存储虚拟存储管理   在前面总结了集中存储管理的刚上,要求作业的逻辑地址空间连续的存放主存储器的某个区域中。当主存储器中没有足够大的区域是,则作业是无法装入的,或必须移动某些作业后才能装入。是否有可能吧作业的连续逻辑地址空间分散到几个不连续的主存区域,且仍能使作业正确执行呢?若可行的话,则可充分利用主存空间有可减少移动所花费的开销。不仅如此,还可采用虚拟存储管理技

    2022年9月25日
    0
  • 小数和二进制的转换_进制转换表

    小数和二进制的转换_进制转换表1.小数用二进制如何表示首先,给出一个任意实数,整数部分用普通的二进制便可以表示,这里只说小数部分如何表示例如0.6文字描述该过程如下:将该数字乘以2,取出整数部分作为二进制表示的第1位;然后再将小数部分乘以2,将得到的整数部分作为二进制表示的第2位;以此类推,知道小数部分为0。特殊情况:小数部分出现循环,无法停止,则用有限的二进制位无法准确表示一个小数,这也是在编程语言中表

    2022年10月31日
    0
  • margin 等高布局

    margin 等高布局

    2022年1月21日
    37
  • Idea激活码永久有效Idea2021.1.1激活码教程-持续更新,一步到位[通俗易懂]

    Idea激活码永久有效Idea2021.1.1激活码教程-持续更新,一步到位[通俗易懂]Idea激活码永久有效2021.1.1激活码教程-Windows版永久激活-持续更新,Idea激活码2021.1.1成功激活

    2022年6月17日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号