Я нашел решение для своего собственного вопроса.
Во-первых, скрипт PHP должен создать кешированный файл именно там, куда указывает URL.Это означает, что после изменения размера изображения сохраните его на этом пути.
В приведенном мной примере: img.domain.com / boats / boat1 / 1/200/200 / a-big-boat.jpg (который не существует при первом вызове) сохранит изображение на этом пути ( img.domain.com / boats / boat1 / 1/200/200 / )с именем a-big-boat.jpg и размером 200x200.
Теперь .htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)\.([^/]+) index.php?folder=$1&id=$2&file=$3&ext=$7&w=$4&h=$5&description=$6 [NC]
Он запросит изображение, а если нетсуществует, вызовите index.php с этими параметрами и создайте кеш.В следующий раз он получит кэшированный файл без прохождения через index.php.Это (.htaccess) лучше, чем проверка, существует ли файл с PHP.
Конечно, RewriteRule предназначен только для моего случая.
И настройка только для того, чтобы избежать перечисления, если пользователь пытается получить доступ к чему-либокак img.domain.com/boats/1/200/ или любая другая папка, созданная системой кэширования.Поместите это как первое условие перезаписи.
RewriteCond %{REQUEST_FILENAME} -d
ErrorDocument 403 /forbidden.php
Внимание! Будьте внимательны с размером и именем файла.В моем случае, поскольку окончательное имя файла (a-big-boat.jpg) не совпадает с исходным (1.jpg), пользователи могут создавать бесконечные файлы кэша, просто меняя окончательное имя.То же самое для размера.
Проверьте требуемый размер на соответствие стандартным размерам, установленным вами.Что касается имени, я получу уникальное имя из базы данных.Это будет проверять БД только один раз на изображение / размер и никогда не проверять снова после кэширования, так что это не проблема.Если имя правильное, создайте кеш, если не отправите «image not found».
Надеюсь, это может помочь другим людям.