Lightsail + Bitnami WordPress でwwwなしリダイレクト設定

AWS
スポンサーリンク

こんにちは。たらこです。

先日、このブログをwwwありURL→wwwなしURLにリダイレクト設定する際に
Lightsailで作成したBitnami WordPressの設定でちょっとハマったので、
備忘録兼ねて設定方法を紹介します。

※HTTPS化していない人はwwwなしリダイレクトと一括で設定する方法をこちらで!(当ブログ)

こんな人に読んでほしい

  • LightsailでWordPressを立てたけど
    wwwありURL→wwwなしURLリダイレクト設定ができない
  • 設定はわかるけど、設定をどこのファイルに書けばいいかわからない
  • 設定をおまじないで書いたからちょっと中身を知りたい

ハマり1:wwwありURLからwwwなしURLにリダイレクトする設定

一般的には下のような設定を追加するようです。

  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\. [NC]
  RewriteRule ^(.*)$ https://example.com%{REQUEST_URI} [R=permanent,L]

なお、https://example.comの部分はそれぞれのドメインになります。

一行ずつ解説します。

1行目:RewriteEngine On

これはURLリダイレクト(Rewrite)の機能を有効化するための設定です。
この設定を書かないと後に続くRewriteCondやRewriteRuleは実行されないので注意が必要です。

2行目:RewriteCond~

RewriteCond

これはどのURLに対してURLのRewriteを実施するか指定する条件式です。

RewriteCond 検索対象(変数名) 検索パターン [オプション]

検索対象はApache標準の変数が用意されています。(今回は%{HTTP_HOST}を使用)
検索パターンは正規表現で指定します。
オプションは、NCORが指定できます。

まず、NCについてですが、検索の際に大文字小文字を区別しないように指定するオプションです。

続いてORですが、これはRewriteCondを複数行書いたときに、
各RewriteCondをORで結合するときに使います。
ORをオプションとして使用しない場合は、デフォルトで各RewriteはANDで結合されます。

オプションは[OR,NC]のように二つ同時に指定できます。

%{HTTP_HOST}

これは、HTTPヘッダのHostと同じ値の変数です。
例えばhttps://example.comのリクエストがあった場合、
%{HTTP_HOST}はexample.comとなります。

^www\.

正規表現で「^(ハット)」は行の先頭を表しています。
^aaaだったらaaabbbとはマッチしますが、baaabbとはマッチしません。

「\(バックスラッシュ)」はエスケープ文字になっています。
今回は「.(ドット)」を文字列として検索したいので、
ドットの前に書くことでそれを実現しています。

つまり、「^www\.」は
検索対象の先頭に「www.」があったらマッチ
ということを表しています。

3行目:RewriteRule~

RewriteRule

これはRewriteCondで検索がマッチした場合、
URLのどこをどう書き換えるかを指定する設定です。

RewriteRule 一致パターン 置換パターン [オプション]

一致パターンは正規表現で指定できます。
置換パターンにはApache標準の変数が利用できます。
オプションには様々な指定ができますが、今回はRLを指定していて、
Rはリダイレクトさせる際のステータス番号を指定でき、
Lはその行以降のRewriteRuleを無効化する指定になっています。

RにはR=301(R=permanent)を指定するようです。

^(.*)$

^については上で説明を記載したので省きます。
正規表現で「.(ドット)」は任意の1文字を表します。
「*(アスタリスク)」は 直前の文字の0回以上の繰り返しを表します。
「$(ドル)」行の末尾を表しています。

よって、「^(.*)$」は
行の先頭かつ行の末尾で、任意の文字列を0回以上繰り返したパターン、
つまり、URLすべてを指しています。

%{REQUEST_URI}

この変数はドメイン以下のリクエスト情報の値になっています。
例えばhttps://example.com/hoge/fugaにアクセスしたとしたら
%{REQUEST_URI}は/hoge/fugaの値が入ってきます。

まとめると

URLの先頭に「www.」が入ってきたら、「www.」がないURLに書き替える
という動作を行っています。

ハマったところ

RewriteRuleの置換パターンを下のようにしてしまっていた

RewriteRule ^(.*)$ %{HTTP_HOST}%{REQUEST_URI} [R=permanent,L]

この状態でhttps://www.example.comにアクセスすると

ハマり2:設定はどのファイルに書けばいいか

Web上ではいろんな意見があって、よく見かけるのは「.htaccess」に書くというものですが、
そもそも.htaccessはディレクトリごとのアクセスポリシーを記載する設定ファイルなので、
こういう全体的な設定はhttpd.confにか書きたいという私の信条です。

が、ここで問題発生。
今回、LightsailでWordPress初期インストール版のOSを選択したんですが、
どうもBitnami側で設定しているApache関連の設定ファイルが至るとこにあって、
どこに書けばいいかさっぱりわからない

ということで手当たり次第に漁り、設定した結果、下記に書くのが適当かと思われます。

/opt/bitnami/apache2/conf/bitnami/bitnami.conf

今回のリダイレクトに該当する部分だけ設定内容を紹介します。

別途HTTP→HTTPSリダイレクトの設定をしているので、
HTTPSのVirtualHost 443側に今回の設定を追加しました。

<VirtualHost _default_:80>
  ...
  HTTP→HTTPSリダイレクトの設定

<VirtualHost _default_:443>
  ...
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\. [NC]
  RewriteRule ^(.*)$ https://cyber-x-cyber.net%{REQUEST_URI} [R=permanent,L]

上記設定をすることで

URL:https://cyber-x-cyber.netにアクセス
→ https://cyber-x-cyber.netにリダイレクト
  → https://cyber-x-cyber.netにリダイレクト

URL:https://cyber-x-cyber.netにアクセス
→ https://cyber-x-cyber.netにリダイレクト

のようにHTTP→HTTPSのリダイレクトを残しながら、wwwあり→wwwなしのリダイレクトも
できるようになりました。

まとめ

今回は、Bitnami WordPressにおけるwwwありURLからwwwなしURLにリダイレクトする設定を紹介しました。
Bitnami WordPressで同じようなハマりをしてる方のお役に立てれば幸いです。

では、よいサイバーライフを!

コメント