
Conseguí que las redirecciones funcionaran escribiendo este archivo de configuración:
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;
}
}
}
Ahora, también me gustaría controlar si es 301 o 302 con cada redirección, así que intenté hacer esto:
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;
}
}
}
Pero parece que no puedo entender bien la declaración de devolución, se queja invalid return code
cuando pruebo el archivo de configuración. ¿Cómo hago para especificar la última línea si tengo tanto el código de retorno como la URL en variables?
Además, alguna sugerencia sobre cómo puedo configurar el valor predeterminado para que sea:
map $request_uri $new_uri {
default https://github.com$request_uri;
¿Para que la regla de redirección predeterminada esté establecida testdomain.com/whatever
en github.com/whatever
?
Respuesta1
No sé cómo implementar el código de estado.
Para la opción predeterminada, puedes probar esto:
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;
}
}
}
Respuesta2
Resuelto usando múltiples 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;
}
}
}
Dejaré la pregunta sin aceptar por un tiempo para ver si hay algún inconveniente y hay una mejor manera de hacerlo.