再起動後、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がそれ以上の値を処理するのを停止します...アイデアはありますか?他のすべての質問は、パラメーターを追加する方法を扱います-私は私のものを削除したいだけです:)
rewrite docs に表示された多くの答えを検索した後、同様の問題がありました。
?を指定した場合書き換えの最後にNginxは元の$ args(引数)を削除します
したがって、あなたの例では、これはトリックを行います:
location ^~ /mypage.php {
rewrite ^/mypage.php$ http://www.example.com/mypage? permanent;
}
URLからパラメータを削除するには、この場合はcoupon=xxx
:
if ($query_string ~ "^(.*)coupon=(.*)$") {
rewrite ^(.*)$ $uri? permanent;
}
これは、ステートメントが一致する場合、すべてのパラメーターをドロップすることに注意してください。 $uri
は、パラメータのない元のリクエストです。
$args
変数をロケーション内で空にします。
set $args '';
指定したパラメーターを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を使用してリクエストを再送信します(パラメーターを削除)