@Vidalia

Как обрабатывать файлы с %-encoded именами в правиле rewrite в nginx?

Есть сайт на 1С-Битрикс с изображениями в форматах JPEG и PNG. Нашёл статью https://camouf.ru/blog-note/7780/ , в которой рассказано, как на лету вместо JPEG и PNG отдавать WebP. Реализовано так:
location ~* ^.+\.(jpg|jpeg|png)$ 
{
  if ( $http_accept ~* webp ) {
	set $webp "A";
  }
  if ( $request_filename ~ (.+)\.(png|jpe?g)$ ) {
	set $file_without_ext $1;
  }
  if ( -f $file_without_ext.webp ) {
	set $webp "${webp}E";
  }
  if ( $webp = AE ) {
	add_header Vary Accept;
	rewrite ^(.+)\.(png|jpe?g)$ $1.webp break;
  }
  expires 365d;
}


Проблема в том, что rewrite работает, только если в имени файла содержатся латинские символы. Если в имени файла присутствует кириллица или пробел, то rewrite не работает, по всей видимости из-за того, что имя файла %-encoded. Есть ли простой способ заставить nginx декодировать содержимое $request_filename?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@dodo512
map $http_accept $img_suffix {
  "~*webp"  ".webp";
}

server {

    location ~ ^(?<filename>.+)\.(png|jpe?g)$ {
        try_files $filename$img_suffix $uri =404;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
google page speed в оценке скорости сайта не использует те "ошибки" которые нашел на сайте.
они имеют рекомендательных харрактер.
Он оценивает среднюю скорость сайта в его тематике не больше ни меньше.
Перевод в вебп вам ничего не даст в этом плане.
Если бы его использование давало реальный прирост уже давно бы все сделали. ( сам формат чуда не делает как вы понимаете)

Если вам действительно хочется ускорить
1. берите vps с 9900k ( количеством мегагерц на ядро для сайта кудк принципиальней чем их количество)
2. в россии ( если деньги на это есть) , ближе, быстрей работает.
3. Переработаейте систему кеширования сайта в 99% она убога. и ускорить ее можно раз в 10-20
Если она работает хорошо перепишите самые тяжелые запросы на чистый D7.
И тд и тп.
Поверьте веб п там будет на милионном месте.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы