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的重写配置中,“或||”的优先级高于“且&&”的优先级
,这一点与平时写程序相反。
分享到:
相关推荐
如果想要实现OR逻辑(即满足任一条件即可),需要在`RewriteCond`指令中明确使用`[OR]`标志。 此外,还有一些常用的条件规则,比如: - 检查请求的文件是否真实存在: ``` RewriteCond %{REQUEST_FILENAME} !-f ```...
文档会解释如何编写和理解RewriteRule和RewriteCond。 4. **虚拟主机**:Apache支持多个网站在同一台服务器上运行,这被称为虚拟主机。文档会教你如何配置基于IP、域名或端口的虚拟主机。 5. **安全与权限**:安全...
下面将对压缩包中的各个文件进行详细解读,以便深入理解Apache服务器的关键概念和功能。 1. **caching.html** - 缓存机制 Apache的缓存功能可以提高网站性能,减少网络延迟。通过缓存静态内容(如图片、CSS和...
在Apache 1.x版本中,如果要启用Rewrite Module,需要在`conf/httpd.conf`文件中加载相应的模块,并添加以下行: ```apache LoadModule Rewrite_module libexec/mod_rewrite.so AddModule mod_rewrite.c ``` 对于...
`.htaccess` 文件是Apache web服务器中的一个配置文件,它允许用户在网站根目录下进行局部配置,以实现一些高级功能,如URL重写、防盗链控制等。这个文件的全称是“分布式配置文件”,即分散在各个目录下的配置文件...
除此之外,还有重写条件(RewriteCond)的使用,它们可以配合RewriteRule一起工作,形成更复杂的逻辑。例如,我们可以只对特定的IP地址或HTTP请求方法应用重写规则。 在进行URL重写时,需要注意避免循环重定向...
`.htaccess`文件中的RewriteRule和RewriteCond可以定义重写规则。 六、日志与错误处理 Apache的日志记录可以通过`ErrorLog`和`CustomLog`指令配置,可以定制日志格式、位置和级别。`LogLevel`指令控制日志的详细...
Apache 的 Rewrite 模块提供了强大的 URL 重写功能,通过在配置文件中添加规则,能够实现复杂的 URL 转换和跳转。本文将详细介绍 Apache 开启伪静态的配置和应用。 一、加载 Rewrite 模块 要使用 Rewrite 模块,...
Apache的主配置文件通常是`httpd.conf`,位于安装目录下的`conf`子目录中。这个文件包含了服务器的基本设置,如端口监听、服务器根目录、MIME类型定义等。另外,Apache支持使用`.htaccess`文件进行局部配置,这对于...
Apache2.4 Win64位 配置PHP: #----------------Fastcgi-------------------------------- LoadModule fcgid_module modules/mod_fcgid.so FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 15 FcgidIOTimeout ...
RewriteRule和RewriteCond是两个核心指令,它们共同决定了何时以及如何重写URL。 五、身份验证与授权 Apache提供多种认证机制,如Basic、Digest和NTLM。通过AuthType、Require、User和Group指令,可以控制哪些用户...
在Apache配置文件`httpd.conf`或`.htaccess`中,你可以通过`RewriteEngine`指令启用Rewrite模块,并使用`RewriteRule`指令定义URL重写规则。例如: ```apacheconf RewriteEngine On RewriteRule ^old-page.html$ /...
在Apache服务器配置中,为了提高安全性,常常需要对服务器进行一些必要的设置,比如隐藏服务器版本信息以及禁用潜在的安全风险功能,如Trace等。本文将详细介绍如何通过修改Apache的核心配置文件`httpd.conf`来实现...
配置方面,Apache 2.2.11提供了更丰富的指令集,如SetEnvIf、RewriteCond等,允许更复杂的逻辑判断和URL规则匹配。同时,它支持SSL/TLS协议,可以实现https安全连接,为用户提供加密的数据传输。 在httpd-2.2.11...
以下是对Apache URL重写规则中一些常用标志的详细说明: 1. **R[=code]**: 强制外部重定向。此标志会在替代字符串前添加主机名和端口号,形成完整的外部URL,并使用指定的HTTP状态码进行重定向。默认情况下,状态码...
1. 安装必要的组件:在大多数Linux系统中,我们需要安装Apache的SSL模块以及SSL证书。通常可以通过以下命令完成: ``` sudo apt-get install apache2 ssl-cert ``` 或者,如果你使用的是CentOS/RHEL系统: ``` ...
同时,Apache也可以参与到大型的Web服务集群中,与其他服务器协同工作。 十、MIME类型 Apache通过AddType指令可以添加或修改文件的MIME类型,确保服务器正确地发送不同类型的文件,如HTML、图片、视频等。 这份...
- RewriteRule和RewriteCond:这两个指令是URL重写的基石,通过正则表达式实现复杂规则。 8. **内容分发**: - Load Balancing:通过代理和负载均衡技术,可以将请求分散到多台服务器,提高可用性和响应速度。 -...
3. **配置环境变量**: 将Apache的安装目录添加到系统环境变量PATH中,便于命令行操作。 4. **配置httpd.conf**: 打开`conf\httpd.conf`配置文件,修改ServerRoot为Apache的安装路径。同时,确保`#LoadModule ...