2016-07-20 10 views
0

Dies ist eine aktualisierte Version dieser Frage. (Ich habe nie gefragt, eine Frage hier, damit ich nicht auf dem ursprünglichen Kommentar kann)Interpolation mehrerer Variablen innerhalb der Nginx-Map-Direktive

Variable interpolation inside Map directive

Nach den docs Kombinationen von Strings und Variablen sind nun erlaubt. Wie hier zu sehen: http://nginx.org/en/docs/http/ngx_http_map_module.html#map

und hier: https://trac.nginx.org/nginx/ticket/663

Der resultierende Wert kann Text, variable (0.9.0) enthält, und deren Kombination (1.11.0).

Allerdings kann ich es immer noch nicht funktionieren.

Wir haben eine große Anzahl von Weiterleitungen und gemäß dem folgenden Vorschlag versuche ich, sie mit der map-Direktive zu implementieren. Hier https://serverfault.com/questions/450325/nginx-and-try-files-try-named-location-with-rewrites-before-fallback

ist ein Beispiel-Mapping:

map $uri $redirect { 
    /wrong/path /right/path/; 
    ~^/another/wrong/path/(?<path>.*)$ /another/right/path/$path; 
} 

Dies gibt die Zeichenkette /another/right/path/$path

Dies funktioniert:

map $uri $redirect { 
    /wrong/path /right/path/; 
    ~^/another/wrong/path/(?<path>.*)$ $path 
} 

So weiß ich, dass die Variable ist nicht das Problem .

Kann jemand Strings mit Variablen in der map-Direktive kombinieren? Was fehlt mir hier?

Ich bin auf Version 1.11.2

Antwort

0

Sie Strings als Beispiel unten kombinieren.

map $host $_env_right_url { 
    default right-path.com; 
} 

map $uri $redirect_uri { 
    ~^/wrong/path/?$ https://$_env_right_url/rightPath; 
    ~^/second/wrong/path/?$ https://$_env_right_url/second/rightPath; 
} 

server { 
    listen 80; 
    server_name WRONG-path.com; 

    location/{ 
     try_files $uri $uri/ @redirect-map; 
    } 

    location @redirect-map { 
     if ($redirect_uri) { # redirect if the variable is defined 
      return 301 $redirect_uri; 
     } 
    } 
} 
Verwandte Themen