エンジニアブログ

四苦八苦しながらmod_rewriteの設定を入れ込んだ話

2016.07.15

batchiです。

弊社のHPのURLが変更される。
ひとまず前回の記事でELBの設定はできた。

さらっと構成図にmod_rewriteを書いたが、
前回時点ではまだ設定は入っていない。

このままだと、
www.infilic.co.jpでアクセスしてきたブラウザでは、
アドレスバーにwww.infilic.co.jpが表示され続ける。

カッコ悪い。
というわけでmod_rewriteの設定です。

実現したいこと

ざっくり言うとこういうことです。

・(www.)infilic.co.jpで来たアクセスを、(www.)simpline.co.jpへリダイレクト
・HTTPで来たアクセスを、HTTPSへリダイレクト

mod_rewrite

httpからhttpsへのリダイレクト

こちらについては、既に設定済みでした。

http:www.infilic.co.jpで来たアクセスを、
https:www.infilic.co.jpに飛ばしてくれる処理です。

前任者の作業記録を漁ってみたところ、
/etc/httpd/conf.d配下に、
https.confというファイルが有り(任意の名称でつけるのだろう)、
そこに下記の設定が記述されていました。

<ifModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{HTTP:X-Forwarded-Port} !^443$
 RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
 RewriteCond %{REQUEST_URI} !(^/blog/)
 RewriteCond %{REQUEST_URI} !(^/shimizu/)
 RewriteCond %{REQUEST_URI} !(^/tech/)
 RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L]
</ifModule>

mod_rewriteってどこに書けばいいの?
.htaccessってよく出てくるけどどこにあるの?

という状態だったので、おとなしく上記に追記することにしました。

ものすごくざっくりしたmod_rewriteの理解

書式

<ifModule mod_rewrite.c>
 RewriteEngine On  #有効にする
 RewriteCond  #条件を書く
 RewriteCond  #条件はいくつも書ける
 RewriteRule  #条件にあてはまるものについて書き換えを実行
</ifModule>

こういうことですね。

RewriteCondの書式

 RewriteCond  <対象> <条件パターン>

こういうことですね。

%{xxxxx}で表されてるのは環境変数です。
サーバ環境変数?HTTP環境変数?だそうです。

RewriteRuleの書式

 RewriteRule  <変更前のURL> <変更後のURL>

こういうことですね。

正規表現

^ 行頭
$ 行末
! 否定
? 0回もしくは1回の出現
. 任意の一文字
* 0回以上の繰り返し

なんとなくこういうことですね。

環境変数

%{HTTP:X-Forwarded-Port} 接続に使用されるポート
%{HTTP_USER_AGENT} ブラウザやOSの情報。など。
%{REQUEST_URI} http://www.simpline.co.jp/tech/?p=1382でいうと、
/tech/?p=1382の部分
%{HTTP_HOST} http://www.simpline.co.jp/tech/?p=1382でいうと、
www.simpline.co.jpの部分

なんとなくこういうことですね。

結果

下記のような設定を記述することで、
ひとまずのやりたいことは実現できました。

<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)infilic.co.jp 
 #infilic.co.jp/ほにゃららで来たら
RewriteRule ^(.*)$ http://www.simpline.co.jp/$1 [R=301,L] 
 #simpline.co.jp/ほにゃららに書き換える。
 #その後、
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
 #443ポートでなくて、
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
 #ELBからのヘルスチェックでもなくて、
RewriteCond %{REQUEST_URI} !(^/blog/)
RewriteCond %{REQUEST_URI} !(^/shimizu/)
RewriteCond %{REQUEST_URI} !(^/tech/)
 #各種ブログでもなかったら、
RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R=301,L]
 #「httpをhttpsに置き換えたもの」に書き換える
</ifModule>

上記の設定だと多少不自然な箇所があるのですが、
クリティカルなわけでもなし、
そこは気づかないふりをすることにしました。

こちらからは以上です。

関連キーワード

この記事をシェアする

Facebook Twitter LINE はてなブックマーク

この記事を読んだ方に
おすすめの記事