如何使地图派生变量反映当前的$ uri?

时间:2017-09-15 20:31:04

标签: nginx

使用以下nginx配置的/olddir1/img.jpeg请求将对/newdir1/img.jpeg进行正确的内部重定向,但会将变量$extra_uri设置为第一次重写时的值/olddir1/img.jpeg循环,即rewrite

在执行$alias_uri指令之前,$extra_uri$alias_uri将具有以下值,一切正确:

  • /newdir1/img.jpeg$extra_uri
  • /olddir1/img.jpegrewrite

运行/newdir1/img.jpeg指令后,将$ uri设置为$alias_uri,变量将具有以下值:

  • /newdir1/img.jpeg$extra_uri
  • /olddir1/img.jpeg$alias_uri

map具有正确的值($uri中没有匹配,因此默认使用,即当前$extra_uri)。 $extra_uri代替了陈旧的价值。

为什么$uri未设置为新的server { listen 80 default_server; server_name 'test.example.local'; location / { root '/var/www/test/content'; set $alias_uri $example__alias_uri; set $extra_uri $example__extra_uri; if ($alias_uri != $uri) { rewrite ^ $alias_uri last; } add_header X-Alias "uri: >$uri< alias_uri: >$alias_uri<" always; add_header X-Extra "uri: >$uri< extra_uri: >$extra_uri<" always; try_files $uri =404; } map $uri $example__alias_uri { default $uri; ~/olddir1(?<file>/[^/]*)$ /newdir1$file; ~/olddir2(?<file>/[^/]*)$ /newdir2$file; } map $uri $example__extra_uri { default $uri; }

volatile

1 个答案:

答案 0 :(得分:1)

将地图标记为map $uri $example__alias_uri { volatile; default $uri; ~/olddir1(?<file>/[^/]*)$ /newdir1$file; ~/olddir2(?<file>/[^/]*)$ /newdir2$file; } map $uri $example__extra_uri { volatile; default $uri; } 会使此问题消失。

\r\n

似乎地图在第一次重写阶段只评估过一次,之后再也没有。