`
cfan_haifeng
  • 浏览: 122092 次
  • 性别: 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规则参数的详细介绍

    如果想要实现OR逻辑(即满足任一条件即可),需要在`RewriteCond`指令中明确使用`[OR]`标志。 此外,还有一些常用的条件规则,比如: - 检查请求的文件是否真实存在: ``` RewriteCond %{REQUEST_FILENAME} !-f ```...

    apache doc 中文文档-html

    文档会解释如何编写和理解RewriteRule和RewriteCond。 4. **虚拟主机**:Apache支持多个网站在同一台服务器上运行,这被称为虚拟主机。文档会教你如何配置基于IP、域名或端口的虚拟主机。 5. **安全与权限**:安全...

    apache 中文参考手册

    下面将对压缩包中的各个文件进行详细解读,以便深入理解Apache服务器的关键概念和功能。 1. **caching.html** - 缓存机制 Apache的缓存功能可以提高网站性能,减少网络延迟。通过缓存静态内容(如图片、CSS和...

    Apache Rewrite Module 的重定向问题

    在Apache 1.x版本中,如果要启用Rewrite Module,需要在`conf/httpd.conf`文件中加载相应的模块,并添加以下行: ```apache LoadModule Rewrite_module libexec/mod_rewrite.so AddModule mod_rewrite.c ``` 对于...

    解析 .htaccess 文件 apache rewrite

    `.htaccess` 文件是Apache web服务器中的一个配置文件,它允许用户在网站根目录下进行局部配置,以实现一些高级功能,如URL重写、防盗链控制等。这个文件的全称是“分布式配置文件”,即分散在各个目录下的配置文件...

    Apache重写与正则表达式经验总结

    除此之外,还有重写条件(RewriteCond)的使用,它们可以配合RewriteRule一起工作,形成更复杂的逻辑。例如,我们可以只对特定的IP地址或HTTP请求方法应用重写规则。 在进行URL重写时,需要注意避免循环重定向...

    Apache2.2中文手册

    `.htaccess`文件中的RewriteRule和RewriteCond可以定义重写规则。 六、日志与错误处理 Apache的日志记录可以通过`ErrorLog`和`CustomLog`指令配置,可以定制日志格式、位置和级别。`LogLevel`指令控制日志的详细...

    Apache开启伪静态

    Apache 的 Rewrite 模块提供了强大的 URL 重写功能,通过在配置文件中添加规则,能够实现复杂的 URL 转换和跳转。本文将详细介绍 Apache 开启伪静态的配置和应用。 一、加载 Rewrite 模块 要使用 Rewrite 模块,...

    Apache配置详解(最好的APACHE配置教程)

    Apache的主配置文件通常是`httpd.conf`,位于安装目录下的`conf`子目录中。这个文件包含了服务器的基本设置,如端口监听、服务器根目录、MIME类型定义等。另外,Apache支持使用`.htaccess`文件进行局部配置,这对于...

    Apache2.4 Win64位

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

    Apache2.2官方中文手册

    RewriteRule和RewriteCond是两个核心指令,它们共同决定了何时以及如何重写URL。 五、身份验证与授权 Apache提供多种认证机制,如Basic、Digest和NTLM。通过AuthType、Require、User和Group指令,可以控制哪些用户...

    Apache的ReWrite的应用

    在Apache配置文件`httpd.conf`或`.htaccess`中,你可以通过`RewriteEngine`指令启用Rewrite模块,并使用`RewriteRule`指令定义URL重写规则。例如: ```apacheconf RewriteEngine On RewriteRule ^old-page.html$ /...

    apache隐藏版本号信息和关闭trace方法

    在Apache服务器配置中,为了提高安全性,常常需要对服务器进行一些必要的设置,比如隐藏服务器版本信息以及禁用潜在的安全风险功能,如Trace等。本文将详细介绍如何通过修改Apache的核心配置文件`httpd.conf`来实现...

    apache2.2.11

    配置方面,Apache 2.2.11提供了更丰富的指令集,如SetEnvIf、RewriteCond等,允许更复杂的逻辑判断和URL规则匹配。同时,它支持SSL/TLS协议,可以实现https安全连接,为用户提供加密的数据传输。 在httpd-2.2.11...

    Apache的URL重写规则的标志详细说明

    以下是对Apache URL重写规则中一些常用标志的详细说明: 1. **R[=code]**: 强制外部重定向。此标志会在替代字符串前添加主机名和端口号,形成完整的外部URL,并使用指定的HTTP状态码进行重定向。默认情况下,状态码...

    Apache Server的Httpd配置文件SSL443 配置https

    1. 安装必要的组件:在大多数Linux系统中,我们需要安装Apache的SSL模块以及SSL证书。通常可以通过以下命令完成: ``` sudo apt-get install apache2 ssl-cert ``` 或者,如果你使用的是CentOS/RHEL系统: ``` ...

    Apache中文手册

    同时,Apache也可以参与到大型的Web服务集群中,与其他服务器协同工作。 十、MIME类型 Apache通过AddType指令可以添加或修改文件的MIME类型,确保服务器正确地发送不同类型的文件,如HTML、图片、视频等。 这份...

    apache2 中文手册

    - RewriteRule和RewriteCond:这两个指令是URL重写的基石,通过正则表达式实现复杂规则。 8. **内容分发**: - Load Balancing:通过代理和负载均衡技术,可以将请求分散到多台服务器,提高可用性和响应速度。 -...

    Apache服务器

    3. **配置环境变量**: 将Apache的安装目录添加到系统环境变量PATH中,便于命令行操作。 4. **配置httpd.conf**: 打开`conf\httpd.conf`配置文件,修改ServerRoot为Apache的安装路径。同时,确保`#LoadModule ...

Global site tag (gtag.js) - Google Analytics