.htacessでできること
- ベーシック認証
- 301リダイレクト
- URLの正規化
- ファイル一覧表示の中止
- 特定のIPアドレスやドメインからのアクセス制限
基本
・.htaccessでのリダイレクト処理は、Apacheで使用できるモジュールの1つ。
・mod_rewriteモジュールを使用する。
<IfModule mod_rewrite.c>
mod_rewriteが有効な場合だけ実行する処理をここに記述します
</IfModule>
mod_rewriteで使用するディレクティブ(命令文)
RewriteEngine
- mod_rewriteを有効にするか無効にするかを宣言できる。
RewriteRule
- どのように書き換えるのかを指定できる。
RewriteRule {パターン} {置換内容}の形式をとり、{パターン}に一致したものを{置換内容}に書き換えます。[R]というフラグと併用(後述)し、リダイレクトを実行する。
RewriteCond
- どんな場合にリライトするかどうか、条件を指定できる 。
RewriteCond {条件}の形式をとります。RewriteRuleの前に記述。
Options -Indexes
- ファイル一覧を表示しないようにする
フラグについて
- RewriteRule の設定行に追加できるオプション
- 基本的には、[R=301]、[R=302]のどちらかを設定します。( [R] と省略すれば [R=302] と同義です。)
- 301:恒久的なリダイレクト。検索エンジンが引っ越しと認識する
- 302:一次的なリダイレクト。検索エンジンが(すぐには)引っ越しと認識しない
[L]
- このフラグがあれば、この行でRewriteRule にマッチした場合、次の行に進むことまずに、その時点で処理を停止します。
逆に、このフラグを忘れていて、次の行に別の RewriteRule 設定がまた記載されていれば、せっかくマッチしたリダイレクト先のURLが再度書き換えれてしまいます。
また、上記の [R] フラグを利用するときは、必ず[L] を併記する必要があります(そうでない場合、エラーが発生していまいます)
結果的に、RewriteRule を記載した行は、[R=301,L] と行末に記述することになるはずです。
例1 :単純にドメインが変わるだけ(ディレクトリ構造そのまま)の引っ越し
例えば、example.com のドメインを、https://new-example.com へとリダイレクトしたいような場合。
example.com直下の.htaccessファイルに以下を記述
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*) https://new-example.com/$1 [R=301,L]
</IfModule>