サイトのリニューアルなどでよく設定するのですが、すぐに忘れますのでまとめておきます。
あと、よくある事なのですが、リダイレクト設定して間違って書いたあとに設定し直しても以前の設定でリダイレクトされるときがあります。
あれって恐らくはキャッシュですので、確認はシークレットモードで見るのが確実です。
変更後、「変わってない」と言われることがあるんですよね…
なお、下記は主にEC-CUBE2系から4系でリニューアルした時に設定したリダイレクトですので、ディレクトリ構成などはEC-CUBEを参考にしていただければ。
RewriteEngine On
# クエリパラメータがついているもの(商品詳細ページ)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} product_id=(.+)
RewriteRule ^products/detail.php /products/detail/%1? [R=301,L]
# 特定のページを違うURLへリダイレクト
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user_data/contact.php /contact [R=301,L]
# .phpが付いていたものをなしにする
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user_data/(.*)\.php /user_data/$1 [R=301,L]
# 特定のクエリパラメータを特定のページへリダイレクト
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} (^|&)category_id=123
RewriteRule ^(.*)$ /user_data/hoge? [R=301,L]
# ハッシュリンク付き
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^hoge/$ /hoge#moge? [R=301,L,NE]
もっと他にもあるかもしれませんので、追加があれば追記していくかも…