使用以下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.jpeg
:rewrite
运行/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
答案 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
似乎地图在第一次重写阶段只评估过一次,之后再也没有。