@Hecktosaurus
Люблю писать код под специфические задачи

Как использовать пользовательские переменные в RewriteCond?

Хочу отдавать avif-версии картинок средствами веб-сервера. Располагаться они будут в подпапке в корне, и с сохранением оригинального пути. Настройку подпапки хочу сделать через переменную, чтобы впоследствии не потеряться при усложнении скрипта.

Проблема в том, что в RewriteCond не обрабатывается эта переменная, просто отдаётся пустота. Можно ли это сделать?

Правила .htaccess
RewriteEngine On
# префикс пути для avif-версий: /1.jpg -> /avif/1.jpg.avif
RewriteRule .* - [ENV=AVIF_CUSTOM_PATH:/avif]
# дебаг - заголовок отдастся, путь будет показан
Header set x-avif-custom-path %{AVIF_CUSTOM_PATH}e
# проверяю наличие и отдаю, если есть
# на этих шагах проблема, %{AVIF_CUSTOM_PATH} обрабатывается пустой, а если прописать "e" в конец,
# как сделано выше в Header set, то только она и добавится -> e/1.jpg
RewriteCond %{DOCUMENT_ROOT}%{AVIF_CUSTOM_PATH}%{REQUEST_URI}.avif -f
RewriteRule ^\/?(.*)\.(jpe?g|png)$ %{AVIF_CUSTOM_PATH}/$1.$2.avif [NC,T=image/avif,L]


Лог апача
strip per-dir prefix: D:/OpenServer_540/domains/amo.test/1.jpg -> 1.jpg, referer: http://amo.test/1.jpg
applying pattern '.*' to uri '1.jpg', referer: http://amo.test/1.jpg
setting env variable 'AVIF_CUSTOM_PATH' to '/avif', referer: http://amo.test/1.jpg
strip per-dir prefix: D:/OpenServer_540/domains/amo.test/1.jpg -> 1.jpg, referer: http://amo.test/1.jpg
applying pattern '^\\/?(.*)\\.(jpe?g|png)$' to uri '1.jpg', referer: http://amo.test/1.jpg
RewriteCond: input='D:/OpenServer_540/domains/amo.test/1.jpg.avif' pattern='-f' => not-matched, referer: http://amo.test/1.jpg
pass through D:/OpenServer_540/domains/amo.test/1.jpg, referer: http://amo.test/1.jpg
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
@dodo512
%{ENV:AVIF_CUSTOM_PATH}
httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rew...
%{ENV:variable}, where variable can be any environment variable, is also available. This is looked-up via internal Apache httpd structures and (if not found there) via getenv() from the Apache httpd server process.


RewriteEngine On
# префикс пути для avif-версий: /1.jpg -> /avif/1.jpg.avif
RewriteRule .* - [ENV=AVIF_CUSTOM_PATH:/avif]
# дебаг - заголовок отдастся, путь будет показан
Header set x-avif-custom-path %{AVIF_CUSTOM_PATH}e
# проверяю наличие и отдаю, если есть
RewriteCond %{DOCUMENT_ROOT}%{ENV:AVIF_CUSTOM_PATH}/$0.avif -f
RewriteRule ^.*\.(?:jpe?g|png)$ %{ENV:AVIF_CUSTOM_PATH}/$0.avif [NC,T=image/avif,L]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы