nginx/apache - хитрый редирект изображений

Старый путь

https://site.com/pictures/202cb962ac59075b964b07152d234b70.jpg

Новый путь с подпапками двух уровней

https://site.com/p/20/2c/202cb962ac59075b964b07152d234b70.jpg

Как можно это сделать средствами htaccess или nginx?

Пока что остановился на создании регулярки https://regex101.com/r/H0Flzp/1


Ответы (2 шт):

Автор решения: AVe

Вот так получилось

location /pictures/ {
    if ($uri ~ "/pictures/(([a-z0-9]{2,2})([a-z0-9]{2,2})([a-z0-9\.]+))$") {
        rewrite "/pictures/(([a-z0-9]{2,2})([a-z0-9]{2,2})([a-z0-9\.]+))$" "/p/$2/$3/$2$3$4" permanent;
    }
}
→ Ссылка
Автор решения: Alexey Ten

А зачем редирект? Проще же сразу отдать картинку.

Например:

location /pictures/ {
    rewrite "/pictures/(([0-9a-f]{2})([0-9a-f]{2})[0-9a-f]{28}\.\w+)$" "/p/$2/$3/$1";
}

Я тут заодно подправил регулярку, судя по виду это хеш, обычно в нём используются шестнадцатеричные цифры.

UPD: Исправил регулярное выражение. В первый раз забыл про расширение файла. https://regex101.com/r/H0Flzp/2

→ Ссылка