使用htaccess重写的描述性文件名

时间:2015-12-14 19:41:45

标签: php .htaccess mod-rewrite

所以我有超过500k的图像存储在目录树中。文件名是md5哈希值,存储在文件名的子目录中,以使子目录保持可接受的大小。

例如:

31c7cdd7b099283a61e0c357a2152a54b5ed6073.jpg 

将存储在

/foobar/3/1/c/31c7cdd7b099283a61e0c357a2152a54b5ed6073.jpg

我想要一个重写规则,使文件名更具描述性,如

/foobar/31c7cdd7b099283a61e0c357a2152a54b5ed6073/descriptive_bs_name.jpg

有没有办法提取/子串前3个字母,以便我可以将它指向正确的目录/文件?

2 个答案:

答案 0 :(得分:1)

RewriteRule ^foobar/((.)(.)(.).*)/.*\.jpg /foobar/$2/$3/$4/$1.jpg [L]

共有4场比赛。第一个是foobar//descriptive_bs_name.jpg之间的所有内容。接下来的3个是文件名的前3个字符,因此您可以构建文件夹结构。

.htaccess tester

使用了http://www.domain.com/foobar/31c7cdd7b099283a61e0c357a2152a54b5ed6073/descriptive_bs_name.jpg

的请求网址

新网址为http://www.domain.com/foobar/3/1/c/31c7cdd7b099283a61e0c357a2152a54b5ed6073.jpg 由于RewriteRule选项中的L,测试停止。

答案 1 :(得分:0)

即使slapyo更快,这里也是另一种选择。也许更容易理解。

RewriteRule ^foobar/(\w)(\w)(\w)(\w+)/(.*)\.jpg$ foobar/$1/$2/$3/$1$2$3$4.jpg [L]

\w匹配任何字母,数字或下划线。