リダイレクトを目的とした.htaccess
ファイルの作成方法と、記述方法を整理する。ドット.
から始まる特殊なファイルなので、作成時の注意点をまとめる。
ドメイン変更のための301リダイレクト
old.com
➡ new.com
へ301リダイレクトする。
RewriteEngine On
RewriteCond %{http_host} ^www.old.com
RewriteRule ^(.*) https://www.new.com/$1 [R=301,L]
簡単に書くなら、
RewriteEngine On
Redirect permanent / https://www.new.com/
WWWなしに統一
SEO効果を目的にドメインをwww.aaa.com
➡ aaa.com
に統一する。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.aaa\.com$
RewriteRule ^(.*)$ https://aaa.com/$1 [R=301,L]
SSL化リダイレクト
SSL化のためプロトコルをHTTPS
に統一する。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{ HTTP_HOST}%{REQUEST_URI} [R=301,L]
存在しないファイルは全てアプリで処理する
WordPressなどのCMSで、存在するファイルは静的に表示し、存在しないファイルは全てアプリで処理させる。
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
コードの解説
- <IfModule mod_rewrite.c>●●</IfModule>
- mod_rewriteモジュール(Apacheで使用できるモジュールの一つ)が有効な場合は●●を実行するようにして、リスクを回避する
- mod_rewrite が利用できない場合、エラーが発生するので、if 文で mod_rewrite が使えるなら「On」という記述を書く
- mod_rewrite.c
mod_rewrite.c
はApacheファイル群のどこかにあるソースファイル
- RewriteEngine on
- mod_rewriteモジュールを起動する宣言式
On
:有効にする、Off
:無効にする
- RewriteCond {条件}
- どういった場合にリダイレクト処理を実行するかどうかについて、条件(conditions)を指定する
- RewriteRule {パターン} {置換内容} [R, L]
- どのように書き換えるのかを指定でき、{パターン}に一致した部分を{置換内容}に書き換える。 [R={リダイレクト方式}]というように、どのような方式でリダイレクトさせるかも指定できる。 [ ]の中に L をつけることで、URL書き換え処理を終了する。
正規表現
^ | 先頭とマッチ |
---|---|
$ | 末尾とマッチ |
.* | 任意の文字の連続(すべての文字列にマッチする) |
(.*) | リクエストされたパスをリダイレクト先でも使いたいので、(.*) とカッコでくくり後方参照の$1とすることで同じパスの違うドメインにリダイレクトさせる |
記述方法を確認したのでもう一度リダイレクトルールを見てみよう。
ドメイン変更の301リダクレトのコード解説
RewriteEngine On
RewriteCond %{http_host} ^www.old.com
RewriteRule ^(.*) https://www.new.com/$1 [R=301,L]
- %{http_host}
%{http_host}
は変数で、HTTP_HOST
=リクエスト先のサーバーのホスト名
なので、
%{http_host}=www.old.comを指す。
- ^www.old.com
^
は先頭とマッチし、$
は末尾とマッチする。
先頭からwww.old.com
で始まる文字列にマッチする。
- ^(.*)
- ドット
.
は文字全てを、アスタリスク*
は0文字以上の繰り返しを表すので、アクセスされたパスが0文字以上(=実質全て)の場合に転送を行う
- $1
$1
は変数で、正規表現のカッコ()
で囲った部分の文字が入っているので、転送後パスの記述に利用することができる
- [R=301,L]
[R=301]
はHTTPステータスコード301を返してリダイレクトすることを表すフラグ[L]
は書き換えプロセスの終了を表すフラグ
この2つのフラグをまとめて[R=301,L]
と記述する。
SSL化リダイレクトのコード解説
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
- %{HTTPS}
- リクエストが
https
なら「ON」、http
なら「OFF」
httpsではない接続の場合にリダイレクト対象とする
- %{REQUEST_URI}
http://hoge.com/test/abc.php
なら/test/abc.php
の箇所。頭にスラッシュ/
がつく
Related Tags