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语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了
Apache2.4 Win64位 配置PHP: #----------------Fastcgi-------------------------------- LoadModule fcgid_module modules/mod_fcgid.so FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 15 FcgidIOTimeout ...
在上面的虚拟主机重写规则中,重写后的URL与您所请求的URL是一样的,我们的设想是将下面3个域名放到防火墙的/etc/hosts文件中,这样Apache将从内部3台Web服务器获得内容,并返回给外部用户,域名对应记录如下。...
二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉 三 在 httpd.conf中添加: <IfModule> RewriteEngine On #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+\.html RewriteRule ^(.*?(?:...
允许您管理在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 < /...
1.利用rewrite 确认你的apache 能使用rewrite mod RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://linuxsky.net/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://linuxsky.net$ [NC] RewriteCond...
方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。 基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下...
在网站的根目录中的 htaccess 文件中,增加如下语句 ############################################ ## enable rewrites Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP:Accept-Language} ^zh-...
•虚拟主机用户可以在.htaccess文件中添加如下代码过滤TRACE请求: RewriteEngine onRewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)RewriteRule .* – [F] •服务器用户在httpd.conf尾部添加如下指令后重启apache即可...
其次,在 httpd.conf 中打开 mod_rewrite 之后,在 httpd.conf 的最后,添加以下内容: RewriteEngine on RewriteMap lowercase int:tolower RewriteMap vhost txt:/usr/local/etc/apache/vhost.map RewriteCond ${...
代码如下: RewriteEngine on RewriteMap lowercase int:tolower RewriteMap vhost txt:/usr/local/etc/apache/vhost.map RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ RewriteCond ${vhost:%1} ^(/.*)$ ...
主要从 apache-2.2 的 mod_auth_basic 复制而来。 basic-auth 握手被一些代码取代,这些代码从可定制的变量中获取用户 ID。 该变量可以是 ap_expr 可以在身份验证挂钩中读取的任何内容,例如:标头字段、httpd 环境...
前提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状态码
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...
新建.htaccess文件,输入下列内容(需要开启mod_rewrite): 1)将不带WWW的域名转向到带WWW的域名下 代码如下: Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^jb51.net [NC] RewriteRule ^...
我们可以用Apache的.htaccess的重定向规则来实现http强制跳转到https访问网站。( 重要提示:必须将代码放到.htaccess文件内容的最前面,以保证重定向优先权。) 代码如下: RewriteEngine On RewriteCond %{SERVER_...
如何使用.htaccess使非伪静态页面301跳转到伪静态页面然后再跳转...RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC] RewriteRule ^article.php$ /articlel-%1.html? [L,R=301] 注意: 创建.htaccess文件,Windows是不
这时候你可以用以下的方式来做到:(Apache mod_rewrite) RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://jb51.net/$1 [R=301,L] 把这段代码放在.htaccess文件...