Apache .htaccess переадресация если файл найден.

Jake Badland

Новичок
Доброго времени суток)

Возник вопрос, пока победить не удалось, прошу помощи))

Смысл в том, что изображения на сайте надо подгонять под определенные размеры. И складывать в определенную папку. Это уже есть.

например
в файле .htaccess
RewriteRule ^uploads/([0-9]{1,3}x[0-9]{1,3})/(.*)$ /image/show/$1/$2 [L]
Переадресовываю на контроллер, он проверяет наличие файла и генерит если его нет.
Так собственно хочется сделать чтобы через .htacces проверялось наличие файла и возвращать сразу его если он уже сгенерирован. Без необходимости дергать контроллер.

Пробовал для проверки
RewriteCond ^uploads/([0-9]{1,3}x[0-9]{1,3})/(.*)$
RewriteRule /image/test/$1 [L]
Параметр не передаётся... Что - то не могу понять как правильно сделать)
Знаю, что по -f проверяется наличие файла, но куда это притулить - не понимаю)

Буду весьма признателен за подсказку)
 

Jake Badland

Новичок
Он сам будет ловиться. Не тупи, пожалуйста.
Так, что? Более подробного ответа не будет?

Мне не надо ловить всё, что не прошло по правилам, поскольку дальше идет

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

а вот как сделать то, что я хочу - пока не понимаю.
 

AnrDaemon

Продвинутый новичок
Код:
<Location /где/там/картинки>
FallbackResource /где/там/ресайзер
</Location>
 

Jake Badland

Новичок
В общем вот такая бяка получилась:

RewriteCond %{REQUEST_URI} /uploads/([0-9]+x[0-9]+)/([0-9]+)/([0-9]+)/(.*)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^uploads/([0-9]+x[0-9]+)/(.*)$ /image/show/$1/$2 [R=301,L]

Подсказанный вариант мне не подходил, но спасибо)
Единственное, что без редиректа не хочет ни в какую(
 

Jake Badland

Новичок
Ваш совет какраз и относится к этой категории. А это работает так как мне надо.
Или поясните в чем бред?

к примеру этот размер (137*91) еще не сгенерирован
/uploads/137x91/2020/06/file-name.jpg
контроллер - метод который генерит /image/show/
 

AnrDaemon

Продвинутый новичок
Если он ещё не сгенерирован, то будет вызван FallbackResource - твой ресайзер, который его создаст, а перед этим проверит, что размеры валидные (вообще и/или для данной картинки), иначе твой сайт можно элементарно положить поспать, запросив пару тысяч ресайзов одной картинки с инкрементом в один пиксель.

Причём сделает это сразу, а не после двух десятков внутренних перенаправлений.
Один раз включи RewriteLog с уровнем 5+, почитай, ЧТО ИМЕННО делает твой вариант настройки. Может, тогда, наконец, дойдёт до твоего сознания простая мысль, что RewriteRule - это дорого и бессмысленно.
 

Jake Badland

Новичок
Если он ещё не сгенерирован, то будет вызван FallbackResource - твой ресайзер, который его создаст, а перед этим проверит, что размеры валидные (вообще и/или для данной картинки), иначе твой сайт можно элементарно положить поспать, запросив пару тысяч ресайзов одной картинки с инкрементом в один пиксель.

Причём сделает это сразу, а не после двух десятков внутренних перенаправлений.
Один раз включи RewriteLog с уровнем 5+, почитай, ЧТО ИМЕННО делает твой вариант настройки. Может, тогда, наконец, дойдёт до твоего сознания простая мысль, что RewriteRule - это дорого и бессмысленно.
Ну его в любом случае можно положить парой тысяч запросов на ресайз)))
Блин, а как мне в этот FallbackResource передать параметры?
 

AnrDaemon

Продвинутый новичок
Зачем?… у тебя вся информация уже есть в запросе.
 
Сверху