ワードプレスでwww統合とhttps 301リダイレクトで移行させる.htaccessファイル書き方と設置場所についてです。
.htaccessファイルの中身のコードについては
httpからhttpsへ移行する時のペラページ用htacess覚書 に詳しく書いたのですが、ワードプレスにはワードプレスに独特なものがあるのでワードプレスについても( ..)φメモしておくことにしました。
ワードプレスの「.htaccess」設置場所
ワードプレスの場合は自分で.htaccessファイルをつくるのではなく、ワードプレスを導入した時にワードプレスが作った.htaccessファイルを使う点が一番の特徴です。
ロリポップではFTPを使ってそのファイルを開き、その場で書き込むことが出来ますが、一般にはFFFTPなどのftpソフトでPCにダウンロードして保存し、改変して差し替えることになります。
もともとの.htaccessファイルが手元にあれば、元に戻せるので、万が一を考えれば原本を保存しておくほうが安心ですよね。
なので、一旦、自分のパソコンにダウンロードして原本を保存してから、改変バージョンの作成をお勧めします。
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のあるものと無いアドレスが並行している場合、ワードプレスでも.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との統合指示は不要ということですね(..)
なを基本的な通常のHTMLサイト・ペラサイトの場合は設置場所などに若干の違いがありあますので、別ページにしてあります。HTMLサイトでの設置場所・コードについて知りたい方はこちら
のページを見ていただければと思いますm(__)m
正規表現についてなど参考にさせていただいたサイトはWIKIをはじめ沢山あるのですが、主にお世話になったのは以下2サイト様の記事になります。ありがとうございました。
参照
http正規化でよく見る.htaccessファイルのmod_rewriteの見方について
.htaccessでhttps化かつwwwなしに統一するクールな方法