はじめてのVPS初期セットアップ⑧ ~ ドメインの統一 (mod_rewrite) ~

「はじめての VPS シリーズ」の第8回目です。

前回は cron によるスケジュール実行を行いました。

これで SSL の導入は完了なのですが、サブドメイン (www) に対しては SSL の証明書を発行していません。

なので、https://www.laravel.tokyo でアクセスした場合、以下のようにエラー画面が表示されてしまいます。

今回は Apache の mod_rewrite機能を使って

  • wwwありなしの統一
  • 常時SSL化

をしてみます。

www あり、なし、別々にアクセスできる状態は人間的にはOKなのですが、SEO 的には問題が発生します。
.htaccess でどちらか一方に統一する301リダイレクトを行いましょう。

 

事前知識

Apache の mod_rewrite 機能とは、アクセスのあったURLを正規表現で書き換えてから処理する機能です。

mod_rewrite 機能を使うには vim で httpd.conf を編集するか、.htaccess を利用することになります。

今回は .htaccess を使って URL を制御します。

ただ、デフォルトの httpd.conf だと .htaccess は利用できない設定になっています。

まずは .htaccess が利用できるように httpd.conf を編集することになります。

 

AllowOverRide の設定値

.htaccess を利用するためには httpd.conf に記述されている AllowOverRide の設定値を変更する必要があります。

AllowOverRide の設定値は以下が指定可能です。

 

None

.htaccess では何も設定できません。デフォルトの設定です。

 

All

.htaccess で設定可能なものは全て有効になります。今回はこれで設定します。

 

.htaccess に記述する Rewrite の書き方

Apacheの mod_rewrite では Rewrite 指示子 を使って記述します。

以下簡単にリライト機能を制御する指定子を紹介します。

 

RewriteEngine

Rewrite 機能自体のオン・オフを制御します。使いたいそれぞれのバーチャルホストに対して RewriteEngine 指示子の設定が必要になります。

 

RewriteCond

RewirteCond は、サーバ変数を参照して、それが指定した正規表現のパターンと一致していれば、次の条件を引き続き実行する、という指示子です。


#------------------------------------------
#RewriteCond構文
#------------------------------------------
#RewriteCond %{サーバ変数名} 正規表現パターン

# 実例
# サーバ変数HTTP_USER_AGENTを参照して、"Mozilla"という単語があれば次の行にあるReriteRuleを適用
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*

#[L] last(last rule) Rewrite機能によるURL変換を終了
RewriteRule ^/$ /mozilla.html [L]

 

RewriteRule

RewriteRule は、URL を書き換えるための指示子です。正規表現は Perl とほぼ同じ。

第3引数のオプションは、その後の処理を指定します。


#------------------------------------------
#RewriteRule構文
#------------------------------------------
#RewriteRule 正規表現パターン 置換パターン オプション

# 実例
# サーバ変数HTTP_USER_AGENTを参照して、"Mozilla"という単語があれば次の行にあるReriteRuleを適用
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*

# [L] last(last rule) Rewrite機能によるURL変換を終了
RewriteRule ^/$ /mozilla.html [L]

 
オプションのデフォルト値は空ですので、オプションが設定されていない場合は何も処理せずに次の条件に移ります。

複数のオプションを追加する場合には、カンマで区切ります。

フラグ 説明
[L] Rewrite機能によるURL変換を終了します。
[NC] 大文字と小文字を区別しないようにします。

 

手順

 

.htaccess を使えるように設定する

vim で httpd.conf(WEBサーバーの設定ファイル)を開きます。


[root@example ~]# vim /etc/httpd/conf/httpd.conf

 
.htaccessが使えるように「AllowOverride」の設定値を以下のように変更します。


:
<Directory />
   AllowOverride All
</Directory>
:
<Directory "/var/www">
   AllowOverride All
</Directory>
:
<Directory "/var/www/html">
   AllowOverride All
</Directory>
:

 

実演

 
設定値を反映させるために httpd を再起動します。


[root@example ~]# systemctl restart httpd

 

.htaccess にリライト機能を記述

ローカルで「.htaccess」というファイル名を作成し、以下を記述します。


# mod_rewriteが利用できるかどうか
# もし利用できない場合は以下のコードをスキップ
<IfModule mod_rewrite.c>

# mod_rewriteの機能を有効化
RewriteEngine on

# wwwありの場合、wwwなしにリダイレクト
RewriteCond %{HTTP_HOST} ^(www\.laravel\.tokyo) [NC]
RewriteRule ^(.*) https://laravel.tokyo/$1 [R=301,L]

# SSLなしの場合、SSLありにリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

</IfModule>

 

.htaccess をサーバーにUP

FileZilla(SFTPクライアントソフト)を使って先ほど作成した.htaccessファイルをアップします。

FileZilla での接続方法は以下をご参照ください。

 

動作確認

「http://www.laravel.tokyo」と入力して「https://laravel.tokyo」にリダイレクトされればOKです。

 
以上です。

 

さくらのVPS

Linuxの知識がある方や初心者の枠から脱した人は「VPS」をおススメします!もし、あなたがデザイナーで静的ページのサイトしか作らないのであれば「レンタルサーバー」でOKです。ただ、Webプログラマーとして仕事をするのであればroot権限のあるVPSサーバーを最低1台、自分専用(学習用)を持っておいたほうがいいでしょう。

Laravelプログラマーの初心者が選ぶ学習用サーバーとは?

公式サイトで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-環境構築