web-dev-qa-db-ja.com

nginx rewrite内のパラメーターを削除する

再起動後、nginxでURLを書き換えています。古いサイトでは、URLにクエリパラメータを含めて、ものをフィルタリングしました。

http://www.example.com/mypage.php?type=4

新しいページには、この種のパラメーターはありません。私はそれらを削除してメインページへのURLを書き換えたいので、以下を取得します。

http://www.example.com/mypage/

Nginxでの私の書き換えルールは:

location ^~ /mypage.php {
    rewrite ^/mypage.php$ http://www.example.com/mypage permanent;
}

ただし、このルールを使用しても、パラメーターは追加されます。 $ nginxがそれ以上の値を処理するのを停止します...アイデアはありますか?他のすべての質問は、パラメーターを追加する方法を扱います-私は私のものを削除したいだけです:)

20
lorem monkey

rewrite docs に表示された多くの答えを検索した後、同様の問題がありました。

?を指定した場合書き換えの最後にNginxは元の$ args(引数)を削除します

したがって、あなたの例では、これはトリックを行います:

location ^~ /mypage.php {
    rewrite ^/mypage.php$ http://www.example.com/mypage? permanent;
}
40
BHowell

URLからパラメータを削除するには、この場合はcoupon=xxx

if ($query_string ~ "^(.*)coupon=(.*)$") {
    rewrite ^(.*)$ $uri? permanent;
}

これは、ステートメントが一致する場合、すべてのパラメーターをドロップすることに注意してください。 $uriは、パラメータのない元のリクエストです。

7
Luke Peterson

$args変数をロケーション内で空にします。

set $args '';
4

指定したパラメーターを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;
}

次に、your_site.com/a = 1&unwanted = 2&c = 3にアクセスします

ステップ1。サーバーは302応答を返し、URLが一致していることを示します。

ステップ2。クライアントは新しいurlを使用してリクエストを再送信します(パラメーターを削除)