Я написал средство создания эскизов на лету с помощью файла htaccess, чтобы увидеть, существует ли запрошенный файл, и если не отправлять пользователя на страницу php для его создания. Мой файл htaccess выглядит так:
# Check the formatting (this works)
RewriteCond %{SCRIPT_FILENAME}%{QUERY_STRING} /([a-zA-Z0-9-]+).(jpg|gif|png)w=([0-9]+)&h=([0-9]+)(&c=(true|false))
# Only forward to thumbnail.php if file doesn't exist
#RewriteCond %{REQUEST_FILENAME} !-f #this works but not for the correct filename!
RewriteCond %1-%2-%3-%4-%6.jpg !-f # Doesn't work!!!
# If file doesn't exist, send here: (this works)
RewriteRule ^.*$ thumbnail.php?file_name=%1&type=%2&w=%3&h=%4&c=%6
Однако моя проверка существования файла, похоже, не работает ... старая версия, которая использует %{REQUEST_FILENAME}
работает, но мне нужно проверить неправильное имя файла. Я убедился, что новый файл %1-%2-%3-%4-%6.jpg
имеет правильный вывод, но не запускает условие!
На основе этого URL:
this-is-the-image-name.gif?w=200&h=100&c=true
Файл htaccess должен проверить, существует ли этот файл:
this-is-the-image-name-gif-200-100-true.jpg
Миниатюры и файл htaccess находятся в одной папке, но эта папка неизвестна и не может быть жестко закодирована. Нужен ли полный путь для проверки? Если да, как мне получить полный путь, но с моим собственным именем файла?
Выдергивала мои волосы этим ... ПОЖАЛУЙСТА Помогите! Спасибо.
Вы делаете это совершенно неправильно (ИМХО). Это должно сработать за вас.
RewriteCond %{QUERY_STRING} ^w=([0-9]+)&h=([0-9]+)(&c=(true|false))
RewriteCond %{DOCUMENT_ROOT}/$1-$2-%1-%2-%4.jpg !-f
RewriteRule ^([a-z0-9\-]+)\.(jpg|jpeg|gif|png)$ thumbnail.php?file_name=$1&type=$2&w=%1&h=%2&c=%4 [NC]
1) Я протестировал его, и он работает, но мне может не хватать чего-то, что применимо только к вашей настройке / системе.
2) Предполагается, что миниатюрные изображения (например, this-is-the-image-name-gif-200-100-true.jpg
) находятся в корневой папке веб-сайта (например, если сайт расположен /var/www/http
затем он проверяет следующий файл: /var/www/http/this-is-the-image-name-gif-200-100-true.jpg
)
3) Если ваши эскизы изображений расположены в /thumbnails
подпапке, вам нужно будет внести небольшие изменения в строки №2 и №3.
Я видел ваш исходный вопрос: https://stackoverflow.com/questions/6302529/htaccess-cant-check-dynamic-file-existence
В соответствии с вашими заметками сгенерированные изображения миниатюр будут сохранены вместе с thumbnail.php в /media/thumbnails/
папка. На основе этой информации правила можно переписать следующим образом:
RewriteCond %{QUERY_STRING} ^w=([0-9]+)&h=([0-9]+)&c=(true|false)
RewriteCond %{DOCUMENT_ROOT}/$1/$2-$3-%1-%2-%3.jpg !-f
RewriteRule ^(media/thumbnails)/([a-z0-9\-]+)\.(jpg|jpeg|gif|png)$ /$1/thumbnail.php?file_name=$2&type=$3&w=%1&h=%2&c=%3 [NC]
Эти правила необходимо поместить в корневой файл сайта .htaccess.
Вы все еще можете поиграться, чтобы сделать его независимым от имени папки (я думаю, вам может потребоваться вставить другое RewriteCondition после первого, чтобы проверить относительный путь на% {REQUEST_URI}), но мне очень сложно играть с воображаемыми файлами без подготовки инфраструктуры.