htaccess: проверьте, существует ли файл на основе переменных - PullRequest
1 голос
/ 09 июня 2011

Я пишу создатель миниатюр на лету для CMS, и мне нужно динамически проверить, существует ли файл.В настоящее время я создал файл htaccess, который проверяет, существует ли запрашиваемый файл, но нужно, чтобы он был немного более продвинутым, и "создать" проверку файла на основе параметров отправленных URL-адресов.

Вот что яв настоящее время есть (на основе идентификатора изображения, а не имени):

RewriteEngine on

#Check for file existence here and forward if exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)(-(crop))?\.jpg$ thumbnail.php?id=$1&w=$2&h=$3&c=$4 [L,QSA]

На основе этого URL:

this-is-the-image-name.gif?w=200&h=100&c=true

Файл htaccess проверяет, существует ли этот файл:

this-is-the-image-name-gif-200-100-crop.jpg

Если его не существует, пользователь RewriteRules может:

thumbnail.php?name=this-is-the-image-name&type=gif&w=200&height=100&c=true

"Обрезать" необязательно, поэтому без него предыдущие URL выглядят так:

this-is-the-image-name.gif?w=200&h=100
this-is-the-image-name-gif-200-100.jpg
thumbnail.php?name=this-is-the-image-name&type=gif&w=200&height=100

В основном мне нужен RewriteCond, чтобы проверить, существует ли файл на основе имени файла, который он создает на основе REQUEST_FILENAME.Есть идеи?

Примерно так:

RewriteCond ^([a-zA-Z0-9-]+).(jpg|gif|png)?w=([0-9]+)&h=([0-9]+)(&c=(-crop))?\.jpg$ %$1-$2-$3-$4-$6.jpg !-f

Даже не уверен, что это возможно ... в таком случае я бы отправил ВСЕ запросы в файл PHP,но так как PHP имеет много накладных расходов, я подумал, что это будет быстрее.

Большое спасибо за любую помощь заранее!

1 Ответ

3 голосов
/ 09 июня 2011

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

RewriteRule обратные ссылки: это обратные ссылки вида $ N (0 <= N <= 9), которые обеспечивают доступ к сгруппированные части (в скобках) шаблон, из RewriteRule, который является в зависимости от текущего набора Переписать условия Conond .. </p>

RewriteCond обратные ссылки: это обратные ссылки вида% N (1 <= N <= 9), которые обеспечивают доступ к сгруппированные части (опять же в скобках) шаблона, из последнего подобранного RewriteCond в текущем наборе условия. </p>

# file is a gif
RewriteCond %{REQUEST_FILENAME} .gif$

# capture the and params in () backreferences
RewriteCond %{QUERY_STRING} w=(200)&h=(100)&c=true

# only rewrites for files that do not exist
RewriteCond %{REQUEST_FILENAME}-gif-%1-%2-crop.jpg !-f

# this rewrites not found thumbs to your php script
RewriteRule %.*$ thumbnail.php?name=%{REQUEST_FILENAME}&type=gif&w=%1&height=%2&c=true
...