WordPress: httpsパラメータ付URL(クエリ文字列)をリダイレクトする方法
このやり方ではうまくいきません。
RewriteEngine On RewriteRule ^foo/index.html\?id=(\d{3})&name=([a-z]+)$ /foo/$2/$1.html? [R=301,L]
なぜなら、RewriteRuleはクエリ文字列(URLパラメタ)を含んでいないからです。
手元にあった「Apacheクックブック第2版」で調べてみるとこのような記述があります。
mod_rewriteのマッチングと書き換え処理では、クエリ文字列(URLパラメタ)をURIの一部として見なさないため、別々に扱う必要がある。
%{QUERY_STRING}を参照する必要がある。
RewriteRuleではクエリ文字列(URLパラメタ)無しのURIしか見ない。
Apacheクックブック第2版 p94より抜粋
つまりは、「RewriteRule」で書き換えられる側のURIには「クエリ文字列(URLパラメタ)が含まれない」ため、上記の方法では正規表現がマッチせずにそのまま「/foo/index.html」を表示してしまっていたようです。
※「RedirectMatch」についての記述はありませんでしたが、WEBで調べてみると同様の問題のようでした。
これでうまくいきました。
.htaccess
RewriteCond %{QUERY_STRING} post_type=info RewriteCond %{HTTPS} on RewriteRule .* https://example? [R,L] </IfModule>
参考サイト:
https://teratail.com/questions/135701
http://d.hatena.ne.jp/mrgoofy33/20101021/1287672461