
Ich habe die Weiterleitungen zum Laufen gebracht, indem ich diese Konfigurationsdatei geschrieben habe:
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;
}
}
}
Nun möchte ich bei jeder Weiterleitung auch kontrollieren, ob es sich um eine 301 oder 302 handelt, also habe ich Folgendes versucht:
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;
}
}
}
Aber ich scheine die Return-Anweisung nicht richtig hinzubekommen, sie beschwert sich, invalid return code
wenn ich die Konfigurationsdatei teste. Wie gebe ich die letzte Zeile an, wenn ich sowohl den Rückgabecode als auch die URL in Variablen habe?
Außerdem: Gibt es Hinweise, wie ich die Standardeinstellung wie folgt konfigurieren kann:
map $request_uri $new_uri {
default https://github.com$request_uri;
sodass die Standardumleitungsregel wie folgt eingestellt testdomain.com/whatever
ist github.com/whatever
:
Antwort1
Ich weiß nicht, wie ich den Statuscode implementieren soll.
Für die Standardoption können Sie Folgendes versuchen:
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;
}
}
}
Antwort2
Gelöst durch die Verwendung mehrerer 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;
}
}
}
Ich werde die Frage eine Weile unbeantwortet lassen, um zu sehen, ob es dabei irgendwelche Fallstricke gibt und ob es eine bessere Möglichkeit gibt, sie zu beantworten.