Nginx で 3 つの URL セグメントの後の接尾辞を削除してリダイレクトする

Nginx で 3 つの URL セグメントの後の接尾辞を削除してリダイレクトする

これは最後のセグメントを削除する必要があるURLです(?order=asc)

https://www.example.com/segment_1/segment_2/page/the_number_goes_here/?order?asc

私が試しているコードは次のとおりです:

location ~ ^/([^/]+)/([^/]+)/page/(\d+)/ {
    try_files $uri $uri/ /index.php?$args;
    # Capture the 2 segments and page number
    set $segment_1 $1;
    set $segment_2 $2;
    set $page_number $4;
    # Redirect without the sufix
    rewrite ^ /$segment_1/$segment_2/page/$page_number/ permanent;
}

答え1

および指令はlocationrewrite正規化されたURIクエリ文字列 (「最後のセグメント」と呼んでいるもの) は含まれません。

クエリ文字列は$args変数で使用できます。

rewrite指令?オプションで、置換値の末尾に を追加することで、元のクエリ文字列を削除できます。

例えば:

rewrite ^ /$segment_1/$segment_2/page/$page_number/? permanent;

また、サンプルコードでは次のようになります。

  • ページ番号はキャプチャされ$3$4
  • Nginx は常におよびディレクティブを最初にtry_files評価するため、このステートメントはおそらく冗長です。setrewrite

最初に評価される

関連情報