Îți compari $request_uri
, care este egal cu /app/index.html?target=master
de la exemplul tău, la target=master
și tinta=sclav
siruri de caractere. Niciuna nu s-a potrivit, deci $redirect_to
variabila devine un șir gol. Dacă doriți să verificați dacă $request_uri
conţine a target=master
sau tinta=sclav
subșiruri, puteți utiliza modele regex în interiorul Hartă
bloc:
harta $request_uri $redirect_to {
servere master „~target=master”;
„~target=slave” servere de sclavi;
}
sau mai bine verificați $arg_target
valoarea variabilei:
harta $arg_target $redirect_to {
master servere;
sclavi sclavi;
}
Luați în considerare și folosirea unora Mod implicit
valoare când nu ţintă
argumentul de interogare este specificat în cerere (sau valoarea sa este nevalidă):
harta $arg_target $redirect_to {
master servere;
sclavi sclavi;
servere master implicite;
}
Ultimul poate fi simplificat la
harta $arg_target $redirect_to {
sclavi sclavi;
servere master implicite;
}
Sau faceți o verificare preliminară, cum ar fi
harta $arg_target $redirect_to {
master servere;
sclavi sclavi;
}
Server {
asculta 80;
nume_server 192.168.1.10;
dacă ($redirect_to = '') {
returnează 501; # HTTP 501 neimplementat
}
Locație / {
proxy_pass http://$redirect_to;
}
}
Actualizați
Dacă înțeleg corect întrebarea dvs. suplimentară - cum să încărcați toate elementele din același fișier în amonte ca fișierul HTML principal - puteți încerca să obțineți un nume în amonte din HTTP Referitor
valoarea antetului dacă ţintă
argumentul de interogare este absent folosind două înlănțuite Hartă
blocuri (aici sunt regex intr-adevăr la locul lor):
harta $arg_target $redirect_to {
master servere;
sclavi sclavi;
implicit $by_referer;
}
harta $http_referer $by_referer {
servere master „~target=master”;
„~target=slave” servere de sclavi;
}
Server {
...
}