Назад | Перейти на главную страницу

Переписывание регулярных выражений с помощью карты

у меня есть url.map содержащий правило перезаписи

~^/A/shopby/(?<brand>[a-zA-Z]+) ~^/category/by-brand/$brand;

так что /A/shopby/a_brand будет перенаправлен на /category/by-brand/a_brand

А также config file

map $request_uri $new_uri {
  include /etc/nginx/urls.map;
}

server {
  rewrite_log on;
  error_log /var/log/nginx/error.log notice;

  if ($new_uri) {
     # return 200 $new_uri; for debugging
     rewrite $request_uri $new_uri permanent;
  }

 location / {
   root /a_root;
   index  index.html;
   try_files $uri $uri/ /index.html;
 }
}

И я продолжаю получать это *60 "$request_uri" does not match "/A/shopby/a_brand" а также моя отладка только вернула мне ~^/category/by-brand/$brand который показал, что регулярное выражение не заменяет захваченную строку

Что я упустил в процессе? Любая помощь будет принята с благодарностью

Ваш rewrite оператор неверен, так как первый параметр должен быть регулярным выражением, а не переменной.

Но вам не нужно использовать rewrite когда вы меняете весь URI. Постоянная перезапись эквивалентна return 301.

Например:

if ($new_uri) {
    return 301 $new_uri;
}

Если вам нужно передать исходные аргументы (которые rewrite будет делать по умолчанию), используйте:

if ($new_uri) {
    return 301 $new_uri$is_args$args;
}

Видеть этот документ для подробностей.