Имя файла изображения Nginx удаляет размеры, изменяя URI с помощью регулярного выражения

Имя файла изображения Nginx удаляет размеры, изменяя URI с помощью регулярного выражения

В конфигурации nginx, как лучше всего вернуть исходное изображение, если требуемый размер изображения не найден, учитывая соглашения WordPress об именовании и обозначении размера изображений?

Итак, скажем, если /image-name-150x170.png не найден, я хочу, чтобы был возвращен /image-name.png. Часть -150-170 может быть некоторыми другими числами. Поэтому я хочу, чтобы тире 1-4 цифры x 1-4 цифры перед точкой в ​​имени файла были удалены.

Я хочу поместить код замены в URI внутри блока местоположения @static_full или переписать его. Интересно, что будет лучше с точки зрения производительности.

#some locations here and then 

location ~* ^.+\.(png|gif|jpg|jpeg){
       access_log off; 
       log_not_found off; 
       expires max; 
       error_page 404 = @static_full;  #if not found, seek #static_ful
}

location @static_full{
  #modify uri here to remove image dimensions like below
  #uri = remove dash 1-4 digits x 1-4 digits before dot
  #or rewrite to original name 
 }

location / {
  try_files $uri $uri/ /index.php?$args ;
}

ОБНОВЛЕНИЕ, я понял, как это сделать. Следующее сделало то, что я хотел сделать.

location @static_full{
  #modify uri here to remove image dimensions like below
  #uri = remove dash three digits x three digits before dot
  rewrite "^(.*)(-[\d]{1,4}+x[\d]{1,4}+.)([\w]{3,4})" $1.$3 break;
 }

решение1

Вы можете рассмотреть возможность использования try_filesвместо error_pageдирективы.

try_files $uri @static_full;

Видетьэтот документдля получения подробной информации.

EDIT - добавлено полное решение:

location ~* ^.+\.(png|gif|jpg|jpeg) {
    try_files $uri @static_full;

    access_log off; 
    log_not_found off; 
    expires max; 
}

location @static_full {
    rewrite "^(.*)(-[\d]{1,4}+x[\d]{1,4}+.)([\w]{3,4})" $1.$3 break;
}

location / {
    try_files $uri $uri/ /index.php?$args ;
}

Связанный контент