Apache Mod-Rewrite:为什么此 URL 未被过滤

Apache Mod-Rewrite:为什么此 URL 未被过滤

我想阻止 iPad 连接到我的服务器,只允许 iPhone 连接。这个允许这种情况的 mod_rewrite 脚本有什么问题?

#Prevent non-iPhones from connecting to the server.
#RewriteCond %{HTTP_USER_AGENT} !.*Apple-iPhone2C1.* [NC]
#RewriteCond %{HTTP_USER_AGENT} !.*Apple-iPhone3C1.* [NC]
#RewriteRule () http://www.xyz.com/ [R,NC,L]



#The next line prevents version 4.0
RewriteCond %{HTTP_USER_AGENT} .*801.293.* [NC]

#The next line prevents version 3.13
RewriteCond %{HTTP_USER_AGENT} .*705.18.* [NC]

#The next line prevents version 3.21
RewriteCond %{HTTP_USER_AGENT} .*702.405.* [NC]

#The next line prevents version 3.2
RewriteCond %{HTTP_USER_AGENT} .*702.367.* [NC]

#Require iPhones to be 3GS or iPhone 4.
RewriteCond %{HTTP_USER_AGENT} !.*Apple-iPhone2C1.* [NC]
RewriteCond %{HTTP_USER_AGENT} !.*Apple-iPhone3C1.* [NC]

有问题的设备有以下用户代理:

 Apple-iPad1C1/803.148 

答案1

默认情况RewriteCond下,使用逻辑,你需要使用或者因为您指定要阻止哪些版本而不是允许哪些版本:

#The next line prevents version 4.0
RewriteCond %{HTTP_USER_AGENT} .*801.293.* [NC,OR]

#The next line prevents version 3.13
RewriteCond %{HTTP_USER_AGENT} .*705.18.* [NC,OR]

#The next line prevents version 3.21
RewriteCond %{HTTP_USER_AGENT} .*702.405.* [NC,OR]

#The next line prevents version 3.2
RewriteCond %{HTTP_USER_AGENT} .*702.367.* [NC,OR]

#Require iPhones to be 3GS or iPhone 4.
RewriteCond %{HTTP_USER_AGENT} !.*Apple-iPhone2C1.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !.*Apple-iPhone3C1.* [NC,OR]

RewriteRule .* http://destination.example.com/ [R,NC,L]

答案2

我认为你缺少 RewriteRule

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

浏览器相关内容描述:

至少对于重要的顶级页面,有时需要提供最佳的浏览器相关内容,即必须为最新的 Netscape 变体提供最高版本,为 Lynx 浏览器提供最低版本,为所有其他浏览器提供平均功能版本。

解决方案:我们不能使用内容协商,因为浏览器不以该形式提供其类型。相反,我们必须对 HTTP 标头“User-Agent”采取行动。以下条件执行以下操作:如果 HTTP 标头“User-Agent”以“Mozilla/3”开头,则页面 foo.html 将被重写为 foo.NS.html,并且重写停止。如果浏览器是版本 1 或 2 的“Lynx”或“Mozilla”,则 URL 变为 foo.20.html。所有其他浏览器都会接收页面 foo.32.html。这是通过以下规则集完成的:

RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/3.*
RewriteRule ^foo\.html$         foo.NS.html          [L]

RewriteCond %{HTTP_USER_AGENT}  ^Lynx/.*         [OR]
RewriteCond %{HTTP_USER_AGENT}  ^Mozilla/[12].*
RewriteRule ^foo\.html$         foo.20.html          [L]

RewriteRule ^foo\.html$         foo.32.html          [L]

相关内容