0
使用以下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
指令运行
后,将$ uri设置为/newdir1/img.jpeg
,变量将具有以下内容值:
$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;
}