如何将 url 中的查询字符串 (\img?src=foo.jpg) 重写为可缓存的 url (\img-foo.jpg)?

如何将 url 中的查询字符串 (\img?src=foo.jpg) 重写为可缓存的 url (\img-foo.jpg)?

这个问题现在已得到部分解决。能流利地说阿帕奇语的天才可以解释这个问题……

已知:大多数代理不会缓存 URL 中带有“?”的资源,即使响应中存在 Cache-control:公共标头。要为这些资源启用代理缓存,我必须从对静态资源的引用中删除查询字符串,而是将参数编码到文件名本身中。*

目前有

 <img src="/imgcpu?src=folder1/photo_citty.jpg&w=3500&h=10&c=p&q=90" />
 <img src="/imgcpu?src=folder2/photo_doggy.jpg&w=100&h=200&c=p" />
 <img src="/imgcpu?src=folder3/photo_birds.jpg&w=200&h=500&f=bw" />
 <img src="/imgcpu?src=folder3/photo_frogs.jpg&w=200&f=bw" />

 <img src="/IMG-folder1/photo_citty.jpg_w3500_h10_cp_q90" />
 <img src="/IMG-folder2/photo_doggy.jpg_w100_h200_cp" />
 <img src="/IMG-folder3/photo_birds.jpg_w200_h500_cs_fbw" />
 <img src="/IMG-folder3/photo_frogs.jpg_w200_fbw" />
  • 图像将驻留在根目录深处的 1 个文件夹中(永远不会更深)
  • img.php?src= 或 img?src= 将永远以此命名

我知道“img?src=”是一个不好的部分,并且已经处理过了:

# Rewrite imgcpu?src= thumbnail maker to nice static urls
RewriteRule ^IMG-(.*) /imgcpu?src=$1 [L]

但其余的我都不知道该说什么了。非常欢迎提供任何线索。谢谢。

进步
IMG-folder1/photo_citty.jpg&w=3500&h=10&c=p&q=90 作品
IMG-folder1/photo_citty.jpg_w-3500_h-10_c-p_q-90 不起作用
IMG-folder1/photo_citty_w-3500_h-10_c-p_q-90.jpg 不起作用

RewriteRule ^IMG-(.+)_w-(.+)_h-(.+)_c-(.+)$ imgcpu\?src=$1&w=$2&h=$3&c=$4 [L]
RewriteRule ^IMG-(.+)_w-(.+)_h-(.+)_f-(.+)$ imgcpu\?src=$1&w=$2&h=$3&f=$4 [L]   
RewriteRule ^IMG-(.+)_w-(.+)_h-(.+)$ imgcpu\?src=$1&w=$2&h=$3 [L]
RewriteRule ^IMG-(.+)_w-(.+)$ imgcpu\?src=$1&w=$2 [L]
RewriteRule ^IMG-(.+)_h-(.+)$ imgcpu\?src=$1&h=$3 [L]
# pfff endless possibilities!!

这甚至没有涵盖首先将高度赋给宽度的情况。不,这行不通!

让我们找到一个解决方案,将所有可选的 &w= 或 &h= 重定向为类似 &[az]=(.*) 的内容,这样 _h- 或 _w- 就是通用的,并且不管那里是什么字母,_c- 或 _q- 都可以适合。那将是一个非常受欢迎的重写。

同时这确实有效!!

<img src"/IMG-folder/photo_w100_h100_cf_q60.jpg"/>

通过使用:

RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+)_q(.+).jpg$ 
            imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4&q=$5 [L]

所以现在的任务是:
[photo123.jpg]&[a-z]=(.*)&[a-z]=(.*)etcettera 将后面的 部分或所有查询重写为photo123_X-x_Y-y(optionally more queries).jpg

答案1

规则

RewriteRule ^/imgcpu\?src=(.+)&w=(.+)&h=(.+)&c=(.+)&q=(.+)$ /IMG-$1_w-$2_h-$3_c-$4_q-$5

将处理第一种情况,问题是您需要一个更复杂的 RE 来处理第二行和第三行的差异(缺失qp部分 url、额外s变量等)。

为了防止长时间的混乱只写正则表达式我会为这三种情况分别制定一条不同的规则。

答案2

RewriteRule ^IMG-(.+)_w-(.+)_h-(.+)_c-(.+)$ imgcpu\?src=$1&w=$2&h=$3&c=$4 [L]
RewriteRule ^IMG-(.+)_w-(.+)_h-(.+)_f-(.+)$ imgcpu\?src=$1&w=$2&h=$3&f=$4 [L]   
RewriteRule ^IMG-(.+)_w-(.+)_h-(.+)$ imgcpu\?src=$1&w=$2&h=$3 [L]
RewriteRule ^IMG-(.+)_w-(.+)$ imgcpu\?src=$1&w=$2 [L]
RewriteRule ^IMG-(.+)_h-(.+)$ imgcpu\?src=$1&h=$3 [L]
# pfff endless possibilities!!

这甚至没有涵盖首先将高度赋给宽度的情况。不,这行不通!

让我们找到一个解决方案,将所有可选的 &w= 或 &h= 重定向为类似 &[az]=(.*) 的内容,这样 _h- 或 _w- 就是通用的,并且不管那里是什么字母,_c- 或 _q- 都可以适合。那将是一个非常受欢迎的重写。

同时这确实有效!!

<img src"/IMG-folder/photo_w100_h100_cf_q60.jpg"/>

通过使用:

RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+)_q(.+).jpg$ 
            imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4&q=$5 [L]

所以现在的任务是:
[photo123.jpg]&[a-z]=(.*)&[a-z]=(.*)etcettera 将后面的 部分或所有查询重写为photo123_X-x_Y-y(optionally more queries).jpg

相关内容