ワードプレス用www統合かつhttps 301リダイレクト移行.htaccessファイル書き方
ワードプレスでwww統合とhttps 301リダイレクトで移行させる.htaccessファイル書き方と設置場所についてです。 .htaccessファイルの中身のコードについては httpからhttpsへ移行する時のペラページ用htacess覚書 に詳しく書いたのですが、ワードプレスにはワードプレスに独特なものがあるのでワードプレスについても( ..)φメモしておくことにしました。

ワードプレスの「.htaccess」設置場所

ワードプレスの場合は自分で.htaccessファイルをつくるのではなく、ワードプレスを導入した時にワードプレスが作った.htaccessファイルを使う点が一番の特徴です。 WPのhtaccessファイル設置場所 ロリポップではFTPを使ってそのファイルを開き、その場で書き込むことが出来ますが、一般にはFFFTPなどのftpソフトでPCにダウンロードして保存し、改変して差し替えることになります。 もともとの.htaccessファイルが手元にあれば、元に戻せるので、万が一を考えれば原本を保存しておくほうが安心ですよね。 なので、一旦、自分のパソコンにダウンロードして原本を保存してから、改変バージョンの作成をお勧めします。 ワードプレスのhtraccessファイル中身

httpsURLへの301リダイレクト用コード

.htaccessの中身は httpからhttpsへ移行する時のペラページ用htacess に書いたものとほぼ同じですが、上下を<ifmodule mod_rewrite.c>~~~~</ifmodule>で挟み、元々のワードプレスのリライト指示の上に書き足すところが違います。
<ifmodule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </ifmodule> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On ~~~~~~ (中略) ~~~~~~~~ # END WordPress
.htaccessの中身は
RewriteEngine On
以下のようにリライトしてください、という指示をだしています。
RewriteCond
適用する条件が書かれています。 「%{HTTPS} off」は「httpsではない場合」という意味です。
RewriteRule
リライトルールが書かれています。 ここでは「ある文字を、記述したURLにリダイレクトする」という意味になります。
^(.*)$
このワンセットで、入力された任意の文字という感じです。 「^」は正規表現の行頭という意味。 「(.*)」は0文字以上の任意の文字・桁数に制限なし 「$」が正規表現の行末という意味。 この場合は入力されたURLアドレスを表しています。
%{HTTP_HOST}
閲覧中のサイトのドメイン
%{REQUEST_URI}
リクエストのあったURI(ドメイン内の下部のページURI等全部含む)
[R=301,L]
Rは「リダイレクト」で301がリダイレクトの種類になります。 Lは、適用した「RewriteRule」ルールがここで終了しますという意味です。

www統合しhttpsへ301リダイレクトするコード

ワードプレスでもwww表記を統一していないサイトだと、SSL化しても2つともがそのまま残っているのはHTMLサイトなどと同じです、 同じサイトのwwwあるなしURLが重複している wwwのあるものと無いアドレスが並行している場合、ワードプレスでも.htaccessファイルでwww表記を統合・httpsサイトへ移行させることができます。 中身はhttpからhttpsへ移行する時のペラページ用htacess覚書 に書いたものと同じですが、上下に<ifmodule mod_rewrite.c>~~~~</ifmodule>を付け加え、元のワードプレスの記述の上の書き加えます。
<ifmodule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule (.*) https://%1/$1 [R=301,L] RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </ifmodule> #BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On ~~~~~~ (中略) ~~~~~~~~ # END WordPress
それぞれの意味は以下のようなものです。
RewriteEngine On
以下のようにリライトしてください、という指示をだしています。 2つリライトするときも、指示はここ一回だけでOKです
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
適用する条件が書かれています。 %{HTTP_HOST} ^www\.(.*)$ [NC]で、http:// WWW.●●●という条件のとき、という意味になります。
%{HTTP_HOST}
閲覧中のサイトのドメイン
^
「^」は正規表現のがここ始まるという行頭の意味
www ¥.
¥もしくは(\)はhttp://www.〇〇〇~~の中の”.”が正規表現の「任意の一文字」という意味ではなく”www.”だと認識させるためにつかう「エスケープ文字」というものなので ”www ¥.”と書くことで ⇒”www.”という意味になります。
[NC]
大文字・小文字の区別をしないという意味。 なので大文字だけの「WWW.」でも大文字と小文字が混在の「Www.」でも、小文字だけの「www.」でも、全てにあてはまりまるようになっています。
$
$は正規表現がここで終わる、という意味。 こに場合はwww.〇〇〇~~の部分に相当します。
(.*)
「(.*)」は0文字以上の任意の文字・桁数に制限なしで、この場合は入力した文字・URL
https://%1/$1
https以下はwwwが無いURIにリダイレクトということになるそうです。 コマンドとか正規表現あまり詳しくないのですが、調べた結果から推測するに %1は”(.*)”を代行して表していて、入力されたURLのことになります。 $1は部分置換として、変えない部分を指すので、 ドメイン以下の各ページなどは変える必要がないので、こう書かれているのかな?と考えました。
[R=301,L]
Rは「リダイレクト」で301がリダイレクトの種類になります。 Lは、適用した「RewriteRule」ルールがここで終了しますという意味です。
RewriteCond %{HTTPS} !on
「%{HTTPS} !onは!が否定を表しますので、「httpsでアクセスされていない時」という意味です。 二つ併用するときは、よく見るoff ではなく!on なのは、このほうが間違えにくいということでしょうか?意図がわたくしはわかりませんので、そのまま記載させてもらっています。
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
リライトルールが書かれています。 ここでは「ある文字を、記述したURLにリダイレクトする」という意味になります。
(.*)
(.*)は0文字以上の任意の文字・桁数に制限なし この場合はhttpのままのURLになります。
%{HTTP_HOST}
閲覧中のサイトのドメイン
%{REQUEST_URI}
リクエストのあったURI(ドメイン内の下部のページURI等全部含む)
任意の文字を現在リクエスト中のホスト名(%{HTTP_HOST)とページ名(%{REQUEST_URI})にhttps://を付けたURIにリライト。
[R=301,L]
Rは「リダイレクト」で301がリダイレクトの種類になります。 Lは、適用した「RewriteRule」ルールがここで終了しますという意味です。

追記・Xserver・日本語ドメインなど

Xserver用のwwwとの統合用のコード

Xserverでは 上に書いた wwwとの統合用のコード では505エラーになりました。 他サーバーでも同様のことがあるかもしれませんので、Xserverで正常に作動したコードを載せておきます↓↓↓↓
<ifmodule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule (.*) https://%1%{REQUEST_URI} [R=301,L] RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </ifmodule> #BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On ~~~~~~ (中略) ~~~~~~~~ # END WordPress
wwwを統合してリライトするコードの$1%{REQUEST_URI}に変えただけ ですが、これで正常に移行しました。

日本語ドメインについて

また日本語ドメインの場合は最初からwww付きのURLというのはないらしいことも、今回初めて思い知りました。SSL化とかがなければきっと死ぬまで知らなかっただろうと思います。 日本語ドメインにはwwwつきURLは存在しない 日本語ドメインでサイトを作っている場合はwwwとの統合指示は不要ということですね(..) なを基本的な通常のHTMLサイト・ペラサイトの場合は設置場所などに若干の違いがありあますので、別ページにしてあります。HTMLサイトでの設置場所・コードについて知りたい方はこちら のページを見ていただければと思いますm(__)m 正規表現についてなど参考にさせていただいたサイトはWIKIをはじめ沢山あるのですが、主にお世話になったのは以下2サイト様の記事になります。ありがとうございました。 参照 http正規化でよく見る.htaccessファイルのmod_rewriteの見方について .htaccessでhttps化かつwwwなしに統一するクールな方法