我想阻止 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]