
Eu tenho redirecionamentos funcionando escrevendo este arquivo de configuração:
map $request_uri $new_uri {
default https://github.com;
/www http://wow.com;
/?p=1 http://wow.com/p1;
}
server {
listen 80;
server_name TestDomain.com www.TestDomain.com;
location / {
if ($new_uri) {
return 301 $new_uri;
}
}
}
Agora, eu também gostaria de controlar se é 301 ou 302 a cada redirecionamento, então tentei fazer isso:
map $request_uri $new_uri {
default https://github.com;
/www http://wow.com;
/?p=1 http://wow.com/p1;
}
map $request_uri $ret_code {
default 302;
/www 302;
/?p=1 302;
}
server {
listen 80;
server_name TestDomain.com www.TestDomain.com;
location / {
if ($new_uri) {
return $ret_code $new_uri;
}
}
}
Mas não consigo acertar a instrução de retorno, ela reclama invalid return code
quando testo o arquivo de configuração. Como faço para especificar a última linha se tenho o código de retorno e o URL nas variáveis?
Além disso, quaisquer dicas sobre como posso configurar o padrão para ser:
map $request_uri $new_uri {
default https://github.com$request_uri;
para que a regra de redirecionamento padrão seja definida testdomain.com/whatever
como github.com/whatever
?
Responder1
Não sei como implementar o código de status.
Para a opção padrão, você pode tentar isto:
map $request_uri $new_uri {
default DEFAULT;
...
}
server {
listen 80;
server_name TestDomain.com www.TestDomain.com;
location / {
if ($new_uri = "DEFAULT") {
return $ret_code https://github.com$request_uri;
}
if ($new_uri) {
return $ret_code $new_uri;
}
}
}
Responder2
Resolvido usando múltiplos ifs
:
map $request_uri $new_uri {
default DEFAULT;
/www http://wow.com;
/?p=1 http://wow.com/p1;
}
map $request_uri $ret_code {
default 507;
/www 302;
/?p=1 301;
}
server {
listen 80;
server_name TestDomain.com www.TestDomain.com;
location / {
if ($new_uri = 'DEFAULT') {
return 301 https://github.com$request_uri;
}
if ($ret_code = 301) {
return 301 $new_uri;
}
if ($ret_code = 302) {
return 302 $new_uri;
}
}
}
Deixarei a pergunta sem aceitação por um tempo para ver se há alguma armadilha nela e se há uma maneira melhor de fazê-lo.