クエリ文字列を含んだURLのリダイレクトに躓いていたんだけど解決したのでメモしときます【htaccess】
ライブドアブログからWordPress に移行させる際に、各個別記事のパーマリンクは変更する事なくそのまま移行でき、カテゴリページについてはhtaccess でリダイレクト処理をして解決させました。
これで完璧!と思っていたら「ページ送り」の事をすっかり忘れてしまっていたのでした。
ページ送りとは?
ページ送りについては面倒なので引用させていただきますw
webページにおいて、複数のページに分割されたコンテンツを閲覧する際に、ナビゲーションの機能を果たす、現在のページ位置などを表示する部分を意味する語。ページャー、ページネーションなどと呼ばれることもある。ページの上部や下部などに、横方向に配列するデザインが採られている場合が多い。
ライブドアブログとWordPressでページ送りのURLが違う
ライブドアブログのページ送りの2ページ目のURLは以下のようになっていました。
http://misato-gurashi.com/?p=2
WordPressでは「PageNavi」というプラグインを使って、ページ送りを実装しているのですが、その場合2ページ目の場合のURLは以下になるのです。
http://misato-gurashi.com/page/2
これをリダイレクトするべく、カテゴリページ同様にhtaccessで「Redirect permanent」を使ってやってみたのですが、クエリ文字列を含んだURLのリダイレクトには使えないようで、上手くいきませんでした。
クエリ文字列とは?
クエリ文字列についても引用でww
クエリ文字列とは|クエリストリング|URLパラメータ|URL引数|query string - 意味 / 定義 / 解説 / 説明 : IT用語辞典
クエリ文字列とは、WebブラウザなどがWebサーバに送信するデータをURLの末尾に特定の形式で表記したもの。 Webアプリケーションなどでクライアントからサーバにパラメータを渡すのに使われる表記法で、URLの末尾に「?」マークを付け、続けて「名前=値」の形式で記述する。値が複数あるときは「&」で区切り、例えば http://example.com/foo/var.php?name1=value1&name2=value2 のように記述する。
RewriteCondとRewriteRuleを使ってリダイレクト
結論としては「Redirect permanent」ではなく「RewriteCondとRewriteRule」を使えばリダイレクトが可能なのですが、ググったソースコードをいくら試しても上手く行かず、ここでかなり時間を費やしました。
リダイレクトそのものは可能なのですが、リダイレクト後のURLの末尾に再びクエリ文字列が追加されてしまったりするのです。
本来はこのURLに飛ばしたいのですが
http://misato-gurashi.com/page/2
リダイレクト先のURLがこんな風になってしまったりするのです。
http://misato-gurashi.com/page/2/?p=2
あきらめかけたのですが、なんとか類似する症状を解決したページを発見する事ができました。
RewriteEngine On RewriteCond %{QUERY_STRING} ^p=([0-9]+)$ RewriteRule ^$ /page/%1? [R=301,L]
これで無事解決です。転送先の末尾に「?」を付けるのがミソだったみたいです。
こちらの記事もオススメ
ゴマダレを気に入った方は是非Twitter、facebook、feedly のいずれかをフォローしてください。最新の更新情報を受け取る事ができます。
読者の方が増えると、さらにやる気が出てきます。これからも頑張っていきますのでどうぞよろしくお願いいたします。