web-dev-qa-db-fra.com

Supprimer les paramètres dans la réécriture nginx

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 :)

20
lorem monkey

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;
}
40
BHowell

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.

7
Luke Peterson

Essayez de définir le $args variable à vider à l'intérieur de l'emplacement.

set $args '';
4
Daniel Pérez Rada

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é)

1