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:

?

1
2
RewriteCond %{HTTP_REFERER} (www.test.cn)
RewriteRule (.*)$ test.php

上面语句的作用是如果你访问的上一个页面的主机地址是www.test.cn,则无论你当前访问的是哪个页面,都会跳转到对test.php的访问。

再看例三:

?

1
2
3
4
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,则要明确的写出来。

下面是自己收藏的一些有用的重写规则:

?

1
2

4
5
RewriteCond %{REQUEST_FILENAME} !-f   //如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)
 
RewriteCond %{REQUEST_FILENAME} !-d   //#如果目录存在就直接访问目录不进行RewriteRule
 
RewriteCond %{REQUEST_URI} !^.*(.css|.js|.gif|.png|.jpg|.jpeg)$ //#如果是这些后缀的文件,就直接访问文件,不进行Rewrite



转载于:https://my.oschina.net/u/1258176/blog/213685

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在httpd.conf,可以使用RewriteCond规则来对请求进行条件判断,以便根据不同的情况进行不同的处理。下面是一个例子: ``` RewriteEngine On RewriteCond %{REQUEST_URI} ^/articles/(.*).html$ RewriteCond %{QUERY_STRING} ^id=(\d+)$ RewriteRule ^.*$ /article/%1/%{QUERY_STRING}? [R=301,L] ``` 这个规则的作用是将旧的URL(如/articles/123.html?id=456)重定向到新的URL(如/article/123/456),其%{REQUEST_URI}和%{QUERY_STRING}是RewriteCond指令的变量,表示请求的URI和查询字符串。具体的规则解释如下: 1. RewriteEngine On:表示开启Rewrite引擎。 2. RewriteCond %{REQUEST_URI} ^/articles/(.*).html$:表示如果请求的URI以/articles/开头,并且以.html结尾,则继续进行下一步重写规则。其(.*).html$表示匹配以.html结尾的任意字符,并将其保存为变量%1。 3. RewriteCond %{QUERY_STRING} ^id=(\d+)$:表示如果请求的查询字符串以id=开头,并且后面跟着一个或多个数字,则继续进行下一步重写规则。其(\d+)表示匹配一个或多个数字,并将其保存为变量%2。 4. RewriteRule ^.*$ /article/%1/%{QUERY_STRING}? [R=301,L]:表示将请求重定向到/article/%1/%{QUERY_STRING},其%1和%{QUERY_STRING}分别是之前保存的变量。这里的?表示去掉原来的查询字符串。最后的[R=301,L]表示返回301状态码,并停止后续的重写规则。 总的来说,RewriteCond规则可以根据请求的特定条件来控制URL的重定向或者其他处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值