Динамическое обслуживание файлов в зависимости от того, записаны ли они в файловую систему - PullRequest
0 голосов
/ 21 ноября 2010

Ужасное название, но я не знаю, как описать ситуацию слишком хорошо.Я хотел бы динамически изменять размер / обрезать изображения.Я надеюсь настроить мой apache для выполнения следующих действий:

  • Запрос на /img/profile.jpg?crop&p=50 получен
  • Apache проверяет, есть ли файл / img/profile.c.50.jpg существует
  • Если оно существует, оно обрабатывается статически без необходимости попадания на мой php-сервер
  • Если его не существует, оно попадает в / cropper.php? path = / img / profile.jpg & p = 50
  • Этот файл затем записывает изображение в файл и обслуживает его
  • Запрос приходит снова (см. шаг 1)

Мне хочется использовать директиву FilesMatch в файле .htaccess, но я действительно не знаю, с чего начать.Будут благодарны любые ссылки или любые идеи.

Спасибо всем.

1 Ответ

1 голос
/ 21 ноября 2010

\ Лично я бы делегировал эту задачу сценарию (возможно, с использованием X-Sendfile), а не переписывающему беспорядку.

Здесь вы, возможно, придется настроить корневой документ и сделать вашчасть "profile" более общая:

RewriteEngine on
RewriteCond %{QUERY_STRING} "(?:^|&)crop&p=50"
RewriteCond %{REQUEST_URI} ^(/img/profile)(\.png)$
RewriteCond /your/document/root%1.c.50%2 -f
RewriteRule ^ %1.c.50%2 [L]

# hand over to crop script if the above doesn't match
RewriteCond %{REQUEST_URI} =/img/profile.png
RewriteRule ^ /cropper.php?path=%{REQUEST_URI}&p=50 [L]

Решение, всегда включающее скрипт: (доступ к которому осуществляется через / img / Profiles / ... для ясности)

  • $ 1 фиксирует имя профиля (в данном случае предполагается, что только 'az'
  • $ 2 фиксирует желаемую ширину
  • $ 3, расширение файла

, что действительно упрощаетпереписать:

RewriteEngine on
RewriteRule ^/img/profiles/([a-z]+)\.([1-9][0-9]+)\.(jpe?g|gif|png)$ /cropper.php?profile=$1.$3&p=$2 [L]

Сценарий проверит, существует ли файл, и либо доставит его, либо сгенерирует его первым.

Решение, взяв имя изображения из запрошенного URL:

(как вы упомянули в своем комментарии)

RewriteEngine on
RewriteCond %{REQUEST_URI} ^(/img/profile)\.([1-9][0-9]+)\.(png|gif|jpe?g)$
RewriteCond /your/document/root%{REQUEST_URI} -f
RewriteRule ^ %{REQUEST_URI} [L]

# hand over to crop script if the above doesn't match
RewriteCond %{REQUEST_URI} ^(/img/profile)\.([1-9][0-9]+)\.(png|gif|jpe?g)$
RewriteRule ^ /cropper.php?path=$1.$3&p=$2 [L]

, который может быть переписан следующим образом, если изображения хранятся непосредственно в корневом каталоге вашего документа:

RewriteCond %{REQUEST_URI} ^(/img/profile)\.([1-9][0-9]+)\.(png|gif|jpe?g)$
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule ^ /cropper.php?path=$1.$3&p=$2 [L]
...