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;
}