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へリダイレクト
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>
上記の設定だと多少不自然な箇所があるのですが、
クリティカルなわけでもなし、
そこは気づかないふりをすることにしました。
こちらからは以上です。