Je réécris des URL dans nginx après une relance. Dans l'ancien site, j'avais des paramètres de requête dans l'URL pour filtrer les choses, par exemple.
http://www.example.com/mypage.php?type=4
La nouvelle page n'a pas ce genre de paramètres. Je souhaite les supprimer et réécrire les URL sur la page principale, afin d'obtenir:
http://www.example.com/mypage/
Ma règle de réécriture dans nginx est:
location ^~ /mypage.php {
rewrite ^/mypage.php$ http://www.example.com/mypage permanent;
}
Mais avec cette règle, le paramètre est toujours ajouté. Je pensais que le $
empêcherait nginx de traiter d'autres valeurs ... des idées? Toutes les autres questions portent sur la façon d'ajouter des paramètres - je veux juste supprimer le mien :)
Eu un problème similaire, après beaucoup de recherches, la réponse s'est présentée dans le réécriture des documents .
Si vous spécifiez un? à la fin d'une réécriture, Nginx supprimera les $ args (arguments) d'origine
Donc, pour votre exemple, cela ferait l'affaire:
location ^~ /mypage.php {
rewrite ^/mypage.php$ http://www.example.com/mypage? permanent;
}
Pour supprimer un paramètre d'une URL, dans ce cas coupon=xxx
:
if ($query_string ~ "^(.*)coupon=(.*)$") {
rewrite ^(.*)$ $uri? permanent;
}
Notez que cela supprimera tous les paramètres si l'instruction correspond. $uri
est la requête d'origine sans paramètres.
Essayez de définir le $args
variable à vider à l'intérieur de l'emplacement.
set $args '';
Si vous souhaitez supprimer un paramètre spécifié de l'URL,
# in location directive:
if ($request_uri ~ "([^\?]*)\?(.*)unwanted=([^&]*)&?(.*)") {
set $original_path $1;
set $args1 $2;
set $unwanted $3;
set $args2 $4;
set $args "";
rewrite ^ "${original_path}?${args1}${args2}" permanent;
}
visitez ensuite votre_site.com/a=1&unwanted=2&c=3
étape 1. Le serveur donne une réponse 302, indiquant que l'URL correspond.
étape 2. le client renvoie une demande avec la nouvelle URL (avec le paramètre supprimé)