全てのWeb担に捧げるRewrite設定集
こんにちは、インフラエンジニアの射場です!
この記事はTECHSCORE Advent Calendar 2014、16日目の記事です。
年末を迎え、どなたも慌ただしく働かれていることと思います。
年末や年度末になるとコーポレートサイトやソリューションサイトの
リニューアルやサーバーの引っ越しがとても多いと思います。
メンテナンス中は訪問者をメンテナンスページに飛ばしたい、
新しいサイトは常時HTTPSで運用したい、URLは絶対に「www」を付けたいetc…
これらの多くのことは「リダイレクト」の設定を行うことで可能ですが、
普段からサーバーに触れていないとなかなか難しく感じるものと思います。
そこで、サーバーエンジニアの私が厳選した超頻出のリダイレクトの設定5選をご紹介します!
ここではレンタルサーバーでも広く使われている、Apache HTTP Server を例にご紹介します。
ここでご紹介する設定の多くはMicrosoft IIS の ISAPI_Rewrite でもお使いいただけます。
設定を行う際の約束事
- 設定を記述するファイルはドキュメントルート直下の.htaccessファイルとします。
- 以下の記述はすでに書かれているものとします。
1 2 |
RewriteEngine On RewriteBase / |
RewriteRuleとRewriteCondについて
「RewriteCond」は、mod_rewriteの構文の一つで、URL書き換えを行うルール条件を指定するものです。RewriteRuleの前に記述します。
RewriteCondがある場合、直後に記述されているRewriteRuleは、RewriteCondが指定するルール条件を満たさないと処理されません。
超頻出のRewite設定集
それでは超頻出のRewite設定をご紹介していきます!
自社以外の接続はメンテナンスページに飛ばしたい
メンテナンス中のごちゃごちゃしたページを利用者に見せたくない、
ECサイトを改修中に注文が入ると困るといった場合はメンテナンスページに行ってもらいましょう。
- 社外からの全ての接続をメンテナンスページにリダイレクトする
1 2 3 4 |
RewriteRule ^/maintenance.html - [L] # ここで明示したIP以外からの接続はメンテナンスページへ RewriteCond %{REMOTE_ADDR} !^(192.168.100.10)$ RewriteRule ^(.*)$ http://hogehoge.net/maintenance.html [R=503,L] |
- 一部のコンテンツは閲覧を許可し、それ以外はメンテナンスページにリダイレクトする
1 2 3 4 5 6 7 8 9 10 |
## 閲覧OKなものを先に許可 RewriteRule ^maintenance/index.php - [L] RewriteRule ^images/ - [L] RewriteRule ^guide/ - [L] RewriteRule ^common/ - [L] # アクセスを許可するIPアドレス RewriteCond %{REMOTE_ADDR} ^(192.168.100.10|172.16.200.100|10.0.100.1)$ RewriteRule ^(.*)$ - [L] # 残りすべてのアクセスをメンテナンス画面HTMLに向ける RewriteRule ^(.*)$ /maintenance/index.html [R=503,L] |
URLをwwwありに統一したい(URLの正規化)
1 2 3 |
RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] |
RewriteCondをwwwありにして、RewriteRuleをwwwなしにするとURLをwwwなしに統一できます。
必ずHTTPSで接続させたい
1 2 |
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
この例はHTTPで接続がきた場合、HTTPSへリダイレクトします。
下記の様に記述することもできますが、ロードバランサーを使用している場合、
ロードバランサーとWebサーバーの間で80番ポート以外のポートで
情報のやりとりをしている場合、意味を成さない設定となってしまいます。
1 2 |
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
HTTPかHTTPSかわかりやすく、ネットワーク機器の設定の影響を受けない最初の設定がおすすめです。
スマホ・ガラケーは専用のページに振り分けたい
1 2 3 4 5 6 7 8 |
# MB RewriteCond %{HTTP_USER_AGENT} (DoCoMo|J-PHONE|Vodafone|SoftBank|UP.Browser) [NC] RewriteRule ^(.*)$ /mb/$1 [L] # SP RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|BlackBerry|Windows Phone|Android.+Mobile) [NC] RewriteCond %{HTTP_USER_AGENT} !iPad [NC] RewriteRule ^(.*)$ /sp/maintenance.html [L] |
上記の例ではiPadでの接続はPCページを見られる設定になっています。
PCでガラケーやスマホページを見せたくない場合は下記の設定を行います。
1 2 |
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|BlackBerry|Windows Phone|Android.+Mobile|DoCoMo|J-PHONE|Vodafone|SoftBank|UP.Browser) [NC] RewriteRule ^(.*)$ /$1 [L] |
ページが存在しない場合、404ページに飛ばしたい
1 2 3 |
RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /404.html [R=404,L] |
RewriteRuleの/404.html は任意のURIを指定してやることができます。
404リダイレクトは下記の方法でも実現可能です。
1 |
ErrorDocument 404 /404.html |
最後に
本記事をご覧頂いた皆様のお仕事がスムーズに進み、皆様が素敵な新年、新年度を迎える一助となればとても嬉しく思います!
最後までご覧いただき、ありがとうございました!