htaccess rewriterule桌面/移动的多个条件

时间:2012-12-09 21:33:12

标签: image apache .htaccess mobile web

我正在使用服务器端图像缩放器自动提供正确大小的图像。

图像缩放器从请求URL中获取用于调整大小的参数,因此我设置了一些.htaccess重写规则,以使图像的URL更漂亮:

RewriteRule ^.*photos/homehero/(.*)$ /v2/imgr/w1140-h640-c16x9-q100-p1/v2/photos/$1 [R=301]

使用上述内容,我可以在代码中使用http://example.com/photos/homehero/file.jpg,然后返回正确大小的照片。这样可以完美地工作,并且调整器会在生成后自动将图像缓存在服务器上,因此网站速度相当快。我目前有5种不同尺寸的图像。

考虑到屏幕尺寸和带宽的考虑因素,我想提供一组单独的图像,宽度/高度减少(w1140-h640以上),质量也会降低(q100以上)适用于移动用户。

我添加了一个重写条件来检测具有第二组重写规则的用户代理。这低于原始规则,例如:

RewriteCond %{HTTP_USER_AGENT} "(android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^.*photos/homehero/(.*)$ /v2/imgr/w570-h320-c16x9-q50-p1/v2/photos/$1 [R=301]

然而,这似乎不起作用。我已经尝试将第二个块放在第一个块之上但是也没有用,并且我还尝试在“正常”重写规则块之前对用户代理(%{HTTP_USER_AGENT} "!(android| ...)使用not标志,但那没用。

我用Google搜索并搜索了StackOverflow,发现了类似但不是问题,所以我想知道这是否真的能在.htaccess中实现?我的完整规则块如下,非常感谢任何帮助。

#Image Resizer Standard sizes   
RewriteRule ^.*photos/homehero/(.*)$        /v2/imgr/w1140-h640-c16x9-q100-p1/v2/photos/$1 [R=301]
RewriteRule ^.*photos/tile-small/(.*)$      /v2/imgr/w504-h252-c6x3-q100-p1/v2/photos/$1    [R=301]
RewriteRule ^.*photos/hero/(.*)$            /v2/imgr/w1140-h200-c57x10-q100-p1/v2/photos/$1 [R=301]
RewriteRule ^.*photos/productshot/(.*)$     /v2/imgr/w1140-h640-c16x9-q100-p1/v2/photos/$1  [R=301]
RewriteRule ^.*photos/gallerythumb/(.*)$    /v2/imgr/w160-h90-c16x9-q100-p1/v2/photos/$1    [R=301]

# mobile site redirection
RewriteCond %{HTTP_USER_AGENT} "(android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^.*photos/homehero/(.*)$        /v2/imgr/w570-h320-c16x9-q50-p1/v2/photos/$1 [R=301]
RewriteRule ^.*photos/tile-small/(.*)$      /v2/imgr/w504-h252-c6x3-q50-p1/v2/photos/$1 [R=301]
RewriteRule ^.*photos/hero/(.*)$            /v2/imgr/w570-h100-c57x10-q100-p1/v2/photos/$1  [R=301]
RewriteRule ^.*photos/productshot/(.*)$     /v2/imgr/w570-h320-c16x9-q100-p1/v2/photos/$1   [R=301]
RewriteRule ^.*photos/gallerythumb/(.*)$    /v2/imgr/w160-h90-c16x9-q100-p1/v2/photos/$1    [R=301]

1 个答案:

答案 0 :(得分:1)

您应该将移动规则置于桌面规则之上。此外,您需要为每个RewriteRule重复RewriteCond。

所以

# mobile site redirection
RewriteCond %{HTTP_USER_AGENT} "(android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^.*photos/homehero/(.*)$        /v2/imgr/w570-h320-c16x9-q50-p1/v2/photos/$1 [R=301]
RewriteCond %{HTTP_USER_AGENT} "(android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^.*photos/tile-small/(.*)$      /v2/imgr/w504-h252-c6x3-q50-p1/v2/photos/$1 [R=301]
RewriteCond %{HTTP_USER_AGENT} "(android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^.*photos/hero/(.*)$            /v2/imgr/w570-h100-c57x10-q100-p1/v2/photos/$1  [R=301]
RewriteCond %{HTTP_USER_AGENT} "(android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^.*photos/productshot/(.*)$     /v2/imgr/w570-h320-c16x9-q100-p1/v2/photos/$1   [R=301]
RewriteCond %{HTTP_USER_AGENT} "(android|blackberry|googlebot-mobile|iemobile|iphone|ipod|opera mobile|palmos|webos)" [NC]
RewriteRule ^.*photos/gallerythumb/(.*)$    /v2/imgr/w160-h90-c16x9-q100-p1/v2/photos/$1    [R=301]

#Image Resizer Standard sizes   
RewriteRule ^.*photos/homehero/(.*)$        /v2/imgr/w1140-h640-c16x9-q100-p1/v2/photos/$1 [R=301]
RewriteRule ^.*photos/tile-small/(.*)$      /v2/imgr/w504-h252-c6x3-q100-p1/v2/photos/$1    [R=301]
RewriteRule ^.*photos/hero/(.*)$            /v2/imgr/w1140-h200-c57x10-q100-p1/v2/photos/$1 [R=301]
RewriteRule ^.*photos/productshot/(.*)$     /v2/imgr/w1140-h640-c16x9-q100-p1/v2/photos/$1  [R=301]
RewriteRule ^.*photos/gallerythumb/(.*)$    /v2/imgr/w160-h90-c16x9-q100-p1/v2/photos/$1    [R=301]