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