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

 

category cloud