Reg Ex左边填充为零

时间:2014-03-03 18:29:21

标签: regex mod-rewrite rewrite alias

我有产品图片网址: 例如。 www.example.com/product_images/12345/large.jpg

现在,由于'ext3服务器'我每个文件夹限制有32,000个文件,猜猜是什么,我非常接近拥有32,000个产品。我无法更改服务器。

我不希望URL本身发生变化,因此我希望创建一个可以在AliasMatch中使用的注册表来生成以下内容...

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个字符,然后将其剁成两半。但我的技能并不是那么好......我坚持使用填充物。

谢谢你的时间!

乔恩。

1 个答案:

答案 0 :(得分: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 - > /5678分之1234

这不会保持文件夹的顺序,但它是一个更简单的规则。

您还可以使用固定长度的前缀 - 例如,以单个数字开头的任何内容都位于不同的文件夹中。这是一个2位数的例子

这会映射

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

使用此功能,2个字符可将您的问题减少100倍。

唯一的问题是ID小于100 - 一种解决方案可能是将其保留在现有文件夹(product_images)中,而您的RewriteRule仅适用于ID + 100。

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