Apache-2.2

如何將 url (img?src=foo.jpg) 中的查詢字元串重寫為可記憶體的 url (img-foo.jpg)?

  • December 6, 2010

現在已部分解決的問題。一個能說流利阿帕奇的天才,可以為這件事大開眼界……

給定:大多數代理,不要用“?”記憶體資源 即使響應中存在 Cache-control: public 標頭,在他們的 URL 中也是如此。要為這些資源啟用代理記憶體,我必須從對靜態資源的引用中刪除查詢字元串,而是將參數編碼為文件名本身。*

目前有

<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= 像 &

$$ a-z $$=(.*) 這樣 _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]=(.*)etcetteraphoto123_X-x_Y-y(optionally more queries).jpg

規則

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

將處理第一種情況,問題是您需要更複雜的 RE 來處理第二行和第三行的差異(url 的缺失qp部分、額外的s變數等)。

為了防止冗長且只寫正則表達式的混亂,我將為這三種情況中的每一種制定一個不同的規則。

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= 像 &

$$ a-z $$=(.*) 這樣 _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]=(.*)etcetteraphoto123_X-x_Y-y(optionally more queries).jpg

引用自:https://serverfault.com/questions/209157