Am acest exemplu în care o căutare html <form>
o obligă să meargă la /search/index.php?q=term
și aș dori să folosesc ceva de genul /termen de căutare
in schimb.
Iată cum arată configurația acum:
locație /căutare/ {
rescrie ^/search/(.+) /search/index.php?q=$1;
}
Accesarea directă a acestei locații funcționează, dar în momentul completării formularului și al căutării acestuia se va folosi „origina” mai degrabă decât rescrie.
Am încercat să folosesc redirecționarea „înapoi”, dar asta a blocat serviciul nginx:
locație /căutare/ {
rescrie ^/search/(.+) /search/index.php?q=$1;
redirecționare ^/search/index.php?q=(.+) /search/$1;
}
Am incercat si rescrie cu permanent
steag, care nu a făcut nimic
locație /căutare/ {
rescrie ^/search/(.+) /search/index.php?q=$1;
rescrie ^/search/index.php?q=(.+) /search/$1 permanent;
}
Știu că este posibil să obții același lucru în PHP cu ceva de genul acesta:
// În partea de sus a /search/index.php
dacă (str_starts_with($_SERVER['REQUEST_URI'], '/search/index.php')){
$protocol = ($_SERVER['HTTP_X_FORWARDED_PROTO'] == "https")? "https": "http";
$server = $_SERVER['HTTP_HOST'];
$interogări = array();
parse_str($_SERVER['QUERY_STRING'], $interogări);
$căutare = $interogări['q'] ?? "";
header("Locație: $protocol://$server/căutare/$căutare");
}
Dar gândiți-vă că ar fi mai bine dacă nginx ar putea face față acestui lucru (dacă este posibil).
Știe cineva cum să rescrie și să redirecționeze accesul de la origine?