`
cfan_haifeng
  • 浏览: 120078 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

验证Apache中 RewriteCond 中or 、and逻辑

阅读更多

1.环境

   window xp

   httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

 

2.httpd.conf配置

  进入D:\wsr\Apache Software Foundation\Apache2.2\conf,修改如下内容:

 

   a.去除 # LoadModule rewrite_module modules/mod_rewrite.so中的第一个#

 

   b.修改AllowOverride None为AllowOverride All 。(有好几处,我这种情况下,修改“<Directory "D:/wsr/Apache Software Foundation/Apache2.2/htdocs">”下的)

 

   c.去除# CustomLog "logs/access.log" combined中的第一个#

 

      其中a,b是为了加载重写模块,c是为了“D:\wsr\Apache Software Foundation\Apache2.2\logs\access.log”更详细,方便我们。更改后人日志信息如下:

127.0.0.1 - - [18/Aug/2012:16:20:42 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/4.0 (compatible; MSIE 8.0 ; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
127.0.0.1 - - [18/Aug/2012:16:20:45 +0800] "GET / HTTP/1.1" 304 -
127.0.0.1 - - [18/Aug/2012:16:20:45 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1 "
 

红色,为IE8访问结果,绿色为FF访问结果

 

 

3.试验


3.1试验1

 

httpd.conf中添加([NC]为大写,RewriteCond语句之间默认的是AND,如果想要OR,则要明确的写出来)

 

NameVirtualHost *:80
<VirtualHost *:80>   
    ServerName localhost
    DirectoryIndex index.php index.html index.htm
 <IfModule rewrite_module>
    RewriteEngine On
  
    RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/5.0.* [NC]
    RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/3.0.* [NC]
    RewriteRule ^/   http://firefox.com.cn/ 
    RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/4.0.* [NC]
    
    RewriteRule ^/   http://www.msn.com.cn/ 
 </IfModule>
</VirtualHost>

 

其效果,和我想象的一样,伪代码如下:

 

 

if(HTTP_USER_AGENT.startWith("Mozilla/5.0")&&HTTP_USER_AGENT.startWith("Mozilla/3.0")){
               System.out.println("(显然不可能执行)FF访问去火狐了 http://firefox.com.cn/");
		}

		if(HTTP_USER_AGENT.startWith("Mozilla/4.0")){
              System.out.println("IE8访问,去微软了 http://www.msn.com.cn/ ");
		}
 


3.2试验2

httpd.conf中添加

 

<IfModule rewrite_module>
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/5.0.* [NC]
    RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/3.0.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/4.0.* [NC]

    
    RewriteRule ^/   http://firefox.com.cn/ 
 </IfModule>

 

本来我以为 产生的伪代码是:

 

if(HTTP_USER_AGENT.startWith("Mozilla/5.0")&&HTTP_USER_AGENT.startWith("Mozilla/3.0")||(HTTP_USER_AGENT.startWith("Mozilla/4.0")){
              System.out.println("IE8访问,去微软了 http://www.msn.com.cn/ ");
		}
 

但实际结果却是:

 

if((HTTP_USER_AGENT.startWith("Mozilla/5.0")&&HTTP_USER_AGENT.startWith("Mozilla/3.0"))||(HTTP_USER_AGENT.startWith("Mozilla/4.0")){
              System.out.println("IE8访问,去微软了 http://www.msn.com.cn/ ");
		}
 

    注意括号 。由此可见,在apache的重写配置中,“或||”的优先级高于“且&&”的优先级 ,这一点与平时写程序相反。

 

分享到:
评论

相关推荐

    浅析Apache中RewriteCond规则参数的详细介绍

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

    Apache2.4 Win64位

    Apache2.4 Win64位 配置PHP: #----------------Fastcgi-------------------------------- LoadModule fcgid_module modules/mod_fcgid.so FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 15 FcgidIOTimeout ...

    apache反向代理

    在上面的虚拟主机重写规则中,重写后的URL与您所请求的URL是一样的,我们的设想是将下面3个域名放到防火墙的/etc/hosts文件中,这样Apache将从内部3台Web服务器获得内容,并返回给外部用户,域名对应记录如下。...

    apache中伪静态配置和使用(Apache虚拟主机下Discuz伪静态)

    二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉 三 在 httpd.conf中添加: &lt;IfModule&gt; RewriteEngine On #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+\.html RewriteRule ^(.*?(?:...

    apache-tools:apache工具

    允许您管理在apache2 mod_proxy conf中定义的Worker / BalancerMember: BalancerMember ajp://10.152.45.1:8001 route=web1 retry=60 BalancerMember ajp://10.152.45.2:8001 route=web2 retry=60 &lt; /...

    apache rewrite防盗链三例

    1.利用rewrite 确认你的apache 能使用rewrite mod RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://linuxsky.net/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://linuxsky.net$ [NC] RewriteCond...

    Apache Rewrite实现URL的301跳转和域名跳转

    方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。 基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下...

    Apache实现禁止中文浏览器访问与301重定向的方法

    在网站的根目录中的 htaccess 文件中,增加如下语句   ############################################ ## enable rewrites Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP:Accept-Language} ^zh-...

    Apache服务器关闭TRACE Method请求方式的方法

    •虚拟主机用户可以在.htaccess文件中添加如下代码过滤TRACE请求: RewriteEngine onRewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)RewriteRule .* – [F] •服务器用户在httpd.conf尾部添加如下指令后重启apache即可...

    Apache服务器二级域名的完美实现

    其次,在 httpd.conf 中打开 mod_rewrite 之后,在 httpd.conf 的最后,添加以下内容: RewriteEngine on RewriteMap lowercase int:tolower RewriteMap vhost txt:/usr/local/etc/apache/vhost.map RewriteCond ${...

    apache 二级域名解析实现方法

    代码如下: RewriteEngine on RewriteMap lowercase int:tolower RewriteMap vhost txt:/usr/local/etc/apache/vhost.map RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ RewriteCond ${vhost:%1} ^(/.*)$ ...

    mod_auth_trustheader:apache-2.x 模块从头|环境|SSL变量获取用户ID-开源

    主要从 apache-2.2 的 mod_auth_basic 复制而来。 basic-auth 握手被一些代码取代,这些代码从可定制的变量中获取用户 ID。 该变量可以是 ap_expr 可以在身份验证挂钩中读取的任何内容,例如:标头字段、httpd 环境...

    Apache中利用mod_rewrite实现防盗链

    前提Apache中的mod_rewrite模块为激活状态,既然要消灭掉mp3文件的盗链就顺便也把图片盗链的设置给做了,下面是我在网站根目录的.htaccess文件中的配置,供同病相怜之人参考:。 view plaincopy to clipboard...

    网站常见漏洞及解决办法

    解决方法: ①开启Apache 的mod_rewrite功能: 在Apahce的配置文件httpd.conf中把#LoadModule rewrite_module ...RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] 禁用URL,返回403HTTP状态码

    ISAPI_Rewrite3 伪静态二级域名RewriteCond设置方法

    RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.52steel\.com$ RewriteCond %{HTTP_HOST} !^(www|wap)(.*)\.52steel\.com$ RewriteRule ^/?$ /%{HTTP_HOST} RewriteRule ^/([a-z0-9\-]+)\.52steel\.com/?$ /city.asp?cs=$1...

    Apache中301重定向的配置代码

    新建.htaccess文件,输入下列内容(需要开启mod_rewrite): 1)将不带WWW的域名转向到带WWW的域名下 代码如下: Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^jb51.net [NC] RewriteRule ^...

    Apache使用 .htaccess 来实现强制https访问的方法

    我们可以用Apache的.htaccess的重定向规则来实现http强制跳转到https访问网站。( 重要提示:必须将代码放到.htaccess文件内容的最前面,以保证重定向优先权。) 代码如下: RewriteEngine On RewriteCond %{SERVER_...

    Apache中使非伪静态url跳转到伪静态url的方法

    如何使用.htaccess使非伪静态页面301跳转到伪静态页面然后再跳转...RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] RewriteRule ^article.php$ /articlel-%1.html? [L,R=301] 注意: 创建.htaccess文件,Windows是不

    Apache mod_rewrite实现HTTP和HTTPS重定向跳转

    这时候你可以用以下的方式来做到:(Apache mod_rewrite) RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://jb51.net/$1 [R=301,L] 把这段代码放在.htaccess文件...

Global site tag (gtag.js) - Google Analytics