Назад | Перейти на главную страницу

htaccess: невозможно проверить наличие динамического пути к файлу!

Я написал средство создания эскизов на лету с помощью файла 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}), но мне очень сложно играть с воображаемыми файлами без подготовки инфраструктуры.