2016年10月17日

クエリ文字列を含んだURLのリダイレクトに躓いていたんだけど解決したのでメモしときます【htaccess】

カテゴリ: ブログ

プログラム・HTML

ライブドアブログからWordPress に移行させる際に、各個別記事のパーマリンクは変更する事なくそのまま移行でき、カテゴリページについてはhtaccess でリダイレクト処理をして解決させました。

これで完璧!と思っていたら「ページ送り」の事をすっかり忘れてしまっていたのでした。

ページ送りとは?

ページ送りについては面倒なので引用させていただきますw

ページ送りとは – 日本語表現辞典 Weblio辞書

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 のいずれかをフォローしてください。最新の更新情報を受け取る事ができます。

読者の方が増えると、さらにやる気が出てきます。これからも頑張っていきますのでどうぞよろしくお願いいたします。

Twitterをフォロー
facebookをフォロー
feedlyをフォロー

プロフィール

サムリ
サムリ
父ちゃん。フリーランス。

おにぎり
おにぎり
長男。小学5年生。猪突猛進の方向音痴。マイクラでは毎度毎度迷子にw
からし
からし
次男。小学2年生。リアルでは聞き分けが良いのですが、ゲームでは何故か超ワガママ
ブログ更新通知アカウント


人気記事ランキング

まだデータがありません。