スポンサードリンク

mod rewrite

mod rewriteとは?

mod_rewriteとは、さまざまな条件を指定してURL書き換えができるサーバーApacheのモジュールの一つです。

正規表現を使ってURLの書き換えができるため、複雑な処理が行えます。また、その個数に制限はありません。

mod_rewriteでできること

mod_rewriteは、HTTP ヘッダ、 サーバー内部変数、タイムスタンプ、データベースなどの情報をもとに、正規表現を使ってURL書き換えができます。

また、動的なURLを静的なURLに変更することもできます。

具体例

  • 条件に該当するURLでアクセスがあった場合、指定したURLにリダイレクトさせる
  • URL表示はそのままで、表示させるファイルを変更する
  • wwwのありなし、index.htmlのありなしの正規化
  • 画像ファイルなどの直リンクを禁止する
  • ユーザーエージェントをもとに、アクセスを振り分ける
  • プロキシサーバー経由のアクセスを拒否する
  • クエリ文字列でアクセスを操作する

など、アイデア次第で様々なことができます。

利用方法

mod_rewriteを利用するには、mod_rewriteをApacheサーバーにインストールする必要があります。

なお、レンタルサーバーでは標準でインストールされていることが多いので、面倒な操作をすることなく利用できます。

利用する方法は、

  • httpd.confに設定する
  • .htaccessに設定する

の2通りがあります。

httpd.confでの設定

httpd.confで設定を行うと、サーバー単位でリダイレクト処理ができます(ディレクトリ単位でも可能)。

.htaccessでの方法と比べて高速に処理を行えることがメリットですが、サーバーのroot権限が必要なのでレンタルサーバーでは利用できません(専有サーバーやVPSで利用可能)。

.htaccessでの設定

.htaccessで設定を行うと、ディレクトリ単位でリダイレクト処理ができます。レンタルサーバーではこの方法でURLの書き換えを行います。

デメリットは、httpd.confでの方法と比べて処理が遅くなることです(URL書き換え処理の過程上、いったん書き換えURLを元に戻す必要があるため)。

しかし、個人レベルの使用では全く気にするレベルではないと思いますので、以後は「.htaccess」での方法を取り扱います。

設定ディレクティブ

.htaccessにmod_rewriteを利用(URL書き換え処理)するためには、使用可能なディレクティブ(命令)を把握していなければなりません。

ディレクティブには以下がありますが、この中でまず押さえておくべきものは「RewriteEngine」「RewriteRule」「RewriteCond」「RewriteBase」の4つです。

  • RewriteEngine
  • RewriteOptions
  • RewriteLog
  • RewriteLogLevel
  • RewriteLock
  • RewriteMap
  • RewriteBase
  • RewriteCond
  • RewriteRule

RewriteEngine

「RewriteEngine」は、Apacheのモジュールであるmod_rewriteを有効もしくは無効にする宣言文です。

RewriteEngine on
RewriteEngine off

「RewriteEngine on」でmod_rewriteを有効化します。複数のURL書き換え処理を指定する場合でも「.htaccess」にひとつだけ書いておけばよいです。

RewriteRuleを使用したくない場合は「RewriteEngine off」で無効化します。詳細はRewriteEngineを参照してください。

RewriteRule

「RewriteRule」は、URLを書き換える構文です。

RewriteRule パターン 置換対象

サーバーからわたってきたURLが「パターン」とマッチした場合に、置換対象で指定されたURL書き換えが行われます。パターンがマッチしない場合はURL書き換えは実行されません。

「RewriteRule」は複数記述することができますが、記述する順番には留意しなければなりません。なぜなら上から順番に処理されていくためです。詳細はRewriteRuleを参照してください。

RewriteCond

「RewriteCond」は、URL書き換えを行うかどうかのルール条件を定義する構文です。

RewriteCond 対象文字列 条件パターン

「RewriteRule」の前に記述し、「対象文字列」が「条件パターン」とマッチした場合に直後のRewriteRuleに処理が渡されます。

特にルール条件を定義しない場合は記述しません。詳細はRewriteCondを参照してください。

RewriteBase

「RewriteBase」は、URL書き換えにおいてベースとなるディレクトリを明示的に指定するものです(.htaccessで使用します)。

URL書き換えを行うディレクトリに.htaccessを設置する場合は記述不要です。詳細はRewriteBaseを参照してください。

mod_rewriteのサンプル

mod_rewriteを習得するためには、頭で考えるより実際にトライした方が早いと思います。

以下に解説つきのサンプルを紹介しますので参考にしてください。

スポンサードリンク