Regex reescrevendo com mapa

3

Eu tenho um url.map contendo uma regra de reescrita

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

para que /A/shopby/a_brand seja redirecionado para /category/by-brand/a_brand

e também 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;
 }
}

E eu continuo recebendo isso %código% e também minha depuração só me retornou *60 "$request_uri" does not match "/A/shopby/a_brand" que mostrou regex não substituiu a string capturada

O que eu perdi no processo? Qualquer ajuda seria muito apreciada

    
por Chung 19.10.2018 / 05:24

1 resposta

1

Sua declaração rewrite está incorreta, pois o primeiro parâmetro deve ser uma expressão regular e não uma variável.

Mas você não precisa usar rewrite quando estiver alterando o URI inteiro. Uma reescrita permanente é equivalente a um return 301 .

Por exemplo:

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

Se você precisar passar os argumentos originais (que rewrite faria por padrão), use:

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

Veja este documento para detalhes.

    
por 19.10.2018 / 11:15

Tags