@Firik67
Middle PHP Developer

Почему не срабатывает rewrite в nginx?

Задача: раздать статику через nginx.
Проблема: пути к картинкам передаются как GET параметры.
Не могу понять, почему не срабатывает rewrite, в регулярку попадаю.
Исходный url
/_next/image?url=/assets/blog/18_01_21/rectangle.jpg&w=1920&q=75

Целевой url /assets/blog/18_01_21/rectangle.jpg

Кусок конфига nginx:
location /_next/image {
    rewrite_log on;
    if ($args ~* "url=/_next/static(.*\.(png|jpg|bmp))") {
        rewrite ^http://$host/static/$1 last;
    }
    if ($args ~* "url=/assets/(?<path>.*\.(png|jpg|bmp))") {
        rewrite ^http://$host/assets/$path last;
    }
}

location /assets {
    return 200;
    try_files $uri $uri/ =404;
}

На выходе всегда 404, в error.log пишет open() "@root_path@/_next/image" failed (2: No such file or directory)
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
karabanov
@karabanov
Системный администратор
Надо избегать rewrite и if в конфиге Nginx.

Рекомендую ознакомиться:
Об использовании regexp в map nginx
Раскрываем возможности map в nginx
Переменная $arg_

location /_next/image {
    return 301 http://$host$arg_url;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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