2014-03-03 181 views
0

我有產品圖片網址: 例如。 www.example.com/product_images/12345/large.jpgReg Ex左填充零點

現在,由於'ext3服務器'我有一個32,000文件每個文件夾的限制,並猜測,我非常接近有32,000產品。我無法更改服務器。

我不想要的網址本身改變,因此一直在尋找創造,我可以在任何一個AliasMatch使用產生以下一個reg恩......

www.example.com/product_images/1 /large.jpg => www.example.com/new_product_images/0000/0001/large.jpg

www.example.com/product_images/123456/large.jpg => www.example .com/new_product_images/0012/3456/large.jpg

我設想它用前導零填充數字到8個字符,然後將它切成兩半。但是我的技能並不是那麼好......我堅持填充。

謝謝你的時間!

Jon。

回答

0

如果你真的想要填充,你可以用多個規則做到這一點,匹配各種長度

RewriteRule ^/product_images/(.{1})(.{4})/(.*)$ new_product_images/000$1/$2/$3 
RewriteRule ^/product_images/(.{2})(.{4})/(.*)$ new_product_images/00$1/$2/$3 
RewriteRule ^/product_images/(.{3})(.{4})/(.*)$ new_product_images/0$1/$2/$3 
RewriteRule ^/product_images/(.{4})(.{4})/(.*)$ new_product_images/$1/$2/$3 

或者,只是有你的文件夾是1個或2或3個字符(不填充),並使用1個法則一切。

RewriteRule ^/product_images/(.+)(.{4})/(.*)$ new_product_images/$1/$2/$3 

這將映射

  • 12345 - > /2345分之1
  • 123456 - > /三千四百五十六分之一十二
  • 1234567 - > /4567分之123
  • 12345678 - >/1234/5678

這不會保持文件夾的順序,但它是一個更簡單的規則。

您也可以使用固定長度的前綴 - 例如,以單個數字開頭的任何內容都位於不同的文件夾中。下面是用2位數字

一個例子這將映射

  • 123 - >/12/3
  • 12345 - > /三百四十五分之一十二
  • 123456 - > /三千四百五十六分之一十二
  • 234567 - > /4567分之23
  • 2345678 - > /45678分之23

利用這一點,2個字符的削減b題是100的因子。

唯一的問題是標識小於100 - 一個解決方案可能是要離開那些在現有文件夾(product_images),以及您的重寫規則僅適用於標識100+。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/product_images/(..)(.+)/(.*)$ new_product_images/$1/$2/$3 
+0

沒有必要使用RewriteCond,因爲小於100的圖像將不匹配規則中的正則表達式,所以默認情況下不會重寫。 – AaronM

+0

你是明星。看起來很高興。今天我會放棄它。非常感謝! – user3352141