.htaccessの作成方法と記述方法【リダイレクト】

リダイレクトを目的とした.htaccessファイルの作成方法と、記述方法を整理する。ドット.から始まる特殊なファイルなので、作成時の注意点をまとめる。

ドメイン変更のための301リダイレクト

old.comnew.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.comaaa.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