我有产品图片网址: 例如。 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个字符,然后将其剁成两半。但我的技能并不是那么好......我坚持使用填充物。
谢谢你的时间!乔恩。
答案 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
这会映射
这不会保持文件夹的顺序,但它是一个更简单的规则。
您还可以使用固定长度的前缀 - 例如,以单个数字开头的任何内容都位于不同的文件夹中。这是一个2位数的例子
这会映射
使用此功能,2个字符可将您的问题减少100倍。
唯一的问题是ID小于100 - 一种解决方案可能是将其保留在现有文件夹(product_images)中,而您的RewriteRule仅适用于ID + 100。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/product_images/(..)(.+)/(.*)$ new_product_images/$1/$2/$3