Web全般

ロリポップ!で301リダイレクトする方法

ブログのパーマリンク変更に伴い301リダイレクトしないといけなくなったので、やり方を調べてみました。

301リダイレクトのやり方自体はそんなに難しくなかったんですが、.htaccessの使い方は難しかったです。リダイレクトするにあたって最低限必要な知識はまとめてあるので参考にしてみてください。

301リダイレクトと302リダイレクト

例えば、あるURL「https://sample.com/hoge」にアクセスがあった時に「https://sample.com/hage」に転送する処理のことをリダイレクトというらしいです。

パーマリンクを変更したときなどに必要になってくる処理です。

301リダイレクトというのは恒久的なURLの変更をする時に使います。302リダイレクトは一時的な変更で、あとで戻すことを前提としています。

wordpressを運営していて、パーマリンクを変更した場合に必要なのは301リダイレクトです。今回はこの301リダイレクトのやり方をメモしておきます。

リダイレクトしないとページの評価がゼロになる!

Googleによるサイトやページの評価はURLと対応させているので、そのURLを変更してしまうと、その評価もゼロになってしまいます。

例えば、サイト評価で重要なSNSのシェア数や被リンク数もゼロになります

Analytics(アナリティクス)に表示されるPVなどの情報もリセットされるので、地味に嫌ですね。

ということで、もったいないのでURL(パーマリンク)を変更したらリダイレクトするようにしましょう。

パーマリンクの設定を最初にやらないといけない理由はこれです。記事をたくさん書いてから変更しないといけないというのはかなりめんどくさいです。

冒頭に書いたように「おじログ」もこの記事を書く直前にパーマリンクを変更しています。約40記事の301リダイレクトはけっこうめんどくさかったです(笑)。

作業はコピペなので、どちらかというとパーマリンクの書き方とカテゴリ分けを考える方が時間がかかってるんですけどね。

事前準備

リダイレクト処理をするには変更前のURL(パーマリンク)が必要なので、変更前に変更前のURL(パーマリンク)をメモしておきましょう。

おじさんの場合はgoogleスプレッドシートにコピペして管理しました。

urlを管理するためのスプレッドシート

 

ついでに新しいパーマリンクを考えたんですが、スプレッドシートで一括管理するとサイトの全体像がわかるので良い感じのパーマリンクを考えやすくなったのでオススメですよ。

さらにカテゴリも新しくしました。やはりカテゴリは少ない方が良いですね。

 

1対1でリダイレクトする場合

あるページのパーマリンクを新しいパーマリンクにリダイレクトしたいときがこれですね。

例えば、「https://sample.com/カテゴリー名/123」から「https://sample.com/カテゴリー名/hoge」に変更した場合です。

この場合は以下のようにすればOKです。

 

まずは、ロリポップ!FTPで「.htaccess」というファイルを探しましょう。一番上の階層にあるはずです。

ロリポップ!で301リダイレクトをするときの手順1

 

そのファイルを開くと以下のように何行か記述されていると思います。

ロリポップ!で301リダイレクトをするときの手順2

 

最上部に以下のように記述してください。

 

RewriteEngine On
RewriteRule ^カテゴリー名/123 https://sample.com/カテゴリー名/hoge [R=301,L]

 

“RewriteEngine On”の部分は省略してもOKです(理由はなぜかわかりませんが、後半に書いてあるからですかね)。

ロリポップ!で301リダイレクトをするときの手順3

保存して完了です。

最上部に記述しないとうまくいかないこともあるようです。試しに<IfModule mod_rewire.c>内やその後ろに記述したらリダイレクトされませんでした。

 

ディレクトリ単位のリダイレクトの場合

例えば、「before」ディレクトリにアクセスがあった場合に「after」ディレクトリに転送させたい場合です。

RewriteEngine On
RewriteRule ^before(.*)$ /after$1 [R=301,L]

 

「wwwあり」から「wwwなし」へのリダイレクト

RewriteEngine on
RewriteCond %{HTTPS_HOST} ^www.example\.com
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

 

「wwwなし」から「wwwあり」へのリダイレクト

RewriteEngine on
RewriteCond %{ HTTP_HOST} ^www.example\.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

 

コードの意味

コピペすれば動くんですが、それぞれの部分の意味を知りたいと思ったので調べてみました。

RewriteEngine On:リダイレクト処理を記述するときに最初に書く
RewriteCond:RewriteRuleを実行するときの条件を定義するところ
RewriteRule:リダイレクト処理の内容を書くところ

^:文字列の始まりを宣言する
.*:任意の文字の連続。つまり、どんな文字列でもマッチする。
(.*):かっこで括り後方参照の$1とすることで、同じパスの違うドメインにリダイレクトできる。
R=301:リダイレクトの種類を301に指定する。
L:Lastの意味。コードの最後に記述する。

 

RewriteCondについて

WEB ARK LABOさんの記事によると、RewriteCondは以下のように書くみたいです。

RewriteCond %変数名(テスト文字列) 条件パターン(正規表現) [フラグ]
RewriteRule ここにRewriteRuleのURL書換&転送設定を記述

 

RewriteCondは複数指定できます。

フラグについて

フラグは2つの役割があります。

  1. RewriteCond の適用条件AND/ORを切替える
  2. 条件判定に大文字/小文字の区別をするか否かを切替える

 

 

1つ目の役割は、RewriteCondを複数指定した場合のAND/ORを切替えます。 フラグを記述せずにRewriteCondを複数行記述した場合はANDになります。 フラグに[OR]と記述した場合はORになります。

2つ目の役割は、その行のRewriteCondの条件比較を大文字と小文字を区別するか否かを切替えます。[NC]と記述することで大文字と小文字を区別しなくなります。 (=NCを指定しないと区別します)

ORとNCをどちらも指定したい場合には[OR,NC]とカンマで区切って指定します。

 

 

NCのCは”character(文字)”とかそういう感じの意味ですかね。Nはnotとか。NotCharacterize的な。微妙に違いそうですが。

 

複数の条件を指定する場合の例

RewriteCond %変数名 条件 [OR,NC]
RewriteCond %変数名 条件
RewriteRule URL書換&転送の記述

 

変数名

変数名はたくさんあってよくわからないので、今後勉強することにします(引用元のサイトが詳しそうですね)。

自分用のメモとして一覧表を載せておきます。

グループ 変数名 値・意味
HTTP ヘッダ HTTP_USER_AGENT ユーザーエージェント
HTTP_REFERER 参照元URL
HTTP_COOKIE クッキー情報
HTTP_FORWARDED プロキシ情報
HTTP_HOST サーバーのホスト名
HTTP_PROXY_CONNECTION プロキシを経由しているか否か
HTTP_ACCEPT ブラウザの言語タイプ
コネクション & リクエスト REMOTE_ADDR リモートアドレス
REMOTE_HOST リモートホスト名
REMOTE_USER リモートユーザー名 (基本認証利用時)
REMOTE_IDENT リモートユーザーのID
REQUEST_METHOD リクエストメソッド
SCRIPT_FILENAME スクリプトファイル名
PATH_INFO パス情報
QUERY_STRING クエリ文字列
AUTH_TYPE 認証タイプ
サーバ内部変数 DOCUMENT_ROOT ドキュメントルートのパス
SERVER_ADMIN サーバー管理者情報
SERVER_NAME サーバー名
SERVER_ADDR サーバーのアドレス
SERVER_PORT サーバーのポート番号
SERVER_PROTOCOL プロトコルバージョン
SERVER_SOFTWARE サーバーソフトウェア
システム関連 TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY 曜日 (0:日 ~ 6:土)
TIME 年月日時分秒 (例:20130123123456)
特別なもの API_VERSION APIバージョン
THE_REQUEST リクエスト文字列
REQUEST_URI リクエストURI
REQUEST_FILENAME リクエストされたファイル名
IS_SUBREQ サブリクエストか否か
HTTPS HTTPSでのアクセスか否か