В конфигурации 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;
}
Вы можете подумать об использовании try_files
вместо error_page
директива.
try_files $uri @static_full;
Видеть этот документ для подробностей.
РЕДАКТИРОВАТЬ - добавлено полное решение:
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 ;
}