Regex Reg Ex左填充为零

Regex Reg Ex左填充为零,regex,mod-rewrite,rewrite,alias,Regex,Mod Rewrite,Rewrite,Alias,我有产品图片URL: 例如:www.example.com/product_images/12345/large.jpg 现在,由于“ext3服务器”,我有一个每个文件夹32000个文件的限制,猜猜看,我非常接近有32000个产品。我无法更改服务器 我不希望URL本身改变,所以我想创建一个reg-ex,我可以在AliasMatch中使用它来生成以下内容 www.example.com/product_images/1/large.jpg=> www.example.com/new_product

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

现在,由于“ext3服务器”,我有一个每个文件夹32000个文件的限制,猜猜看,我非常接近有32000个产品。我无法更改服务器

我不希望URL本身改变,所以我想创建一个reg-ex,我可以在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个字符,然后将其切成两半。但我的注册前技能不是很好。。。我被填充物卡住了

谢谢你抽出时间


Jon.

如果你真的想要填充,你可以使用多个规则,匹配不同的长度

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 -> /1/2345 123456 -> /12/3456 1234567 -> /123/4567 12345678 -> /1234/5678 这并不能使文件夹保持有序,但这是一个更简单的规则

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

这张地图

123 -> /12/3 12345 -> /12/345 123456 -> /12/3456 234567 -> /23/4567 2345678 -> /23/45678 使用此选项,2个字符可将问题减少100倍

唯一的问题是IDs小于100-一个解决方案可能是将这些保留在现有文件夹product_images中,并且您的重写规则仅适用于IDs 100+

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

不需要重写,因为小于100的图像将与规则中的正则表达式不匹配,因此默认情况下不会重写。你是明星。那看起来很棒。我今天要试一试。谢谢!