Apache mod_rewrite 機能について

 サッスー

サッスーは、そんなに優秀なエンジニアではないので、

(ダメエンジニアなので)mod_rewrite って何?から始まった。

 

WS000674

 

「mod_rewrite って何?」と悩んでいても何も始まらないので、調べてみた。

 

 

mod_rewrite とは Apache のモジュール群の1つである

 

ネットで調べると、Apache に含まれる数多くのモジュールの中の1つである。
だから、他にも数多くのモジュールがある。

 

 

というか、Apache にはたくさんのモジュールがありすぎる(笑)

それが余計に分かりづらくさせている。

 

Apache が mod_rewrite のモジュールをロードすると、

mod_rewrite のモジュールが使用できるようになる。

 

 

 

ちなみに、モジュールをロードすれば、その分 Apache のメモリ消費量が増える。
だから、必要のないモジュールはロードしない。

 

 

 

また、必要のないモジュールをロードすることで

セキュリティホールができる可能性もあるので、

セキュリティ面からも不要なモジュールはロードしない。

 

 

 

 

 

分かりにくいので Apache の構成を解説

Apache はこんな構成になっている。

 

Apache   -  mod_rewrite   -  RewriteRule
(アプリ)  (モジュール)  (ディレクティブ)

 

Apacheには、数多くのモジュール(mod_proxy とか mod_rewriteとか)が含まれている。
それぞれのモジュールには、数多くのディレクティブ(命令・コマンドの意味)の機能を持っている。

 

このように複雑な構成になっているので、一度に全部理解しようとしない。

1つ1つ覚えていけば十分である。

 

 

 

 

 

mod_rewrite って何をするの?何ができるの?

mod_rewrite モジュールは、リダイレクトやURLの書き換えを行う。

 

具体的には、ユーザーからリクエストしたURL変更して、

変更したURLへ転送することができる。

(リダイレクトすることができる)

 

 

 

ここで redirect の英語の意味を復習

 

 

 

redirect
(…を)向け直す、変える、あて名を(…に)書き換える、転送するなど。
→簡単に言えば、redirectとは「転送する」ということか。

 

たとえば、
http://example.com/service/foo.txt へアクセスが来たら、
http://sample1.com/service/foo.txt へ転送できる。

 

こんなことができるのである。

 

 

 

もっと具体的に言うと、

 

①ブラウザより http://example.com/service/foo.txt へアクセスが来る

 

 

②Apache が http://sample1.com/service/foo.txt へアクセスするように返事をする。

 

 

③Apacheからの返事を受けて、ブラウザが http://sample1.com/service/foo.txt へアクセスする

 

 

このような流れである。

 

 

 

図も作ってみた。

ws000024

これが、「mod_rewrite」の機能の1つである「Redirect」ディレクティブ(命令・コマンド)である。

 

 

 

mod_rewrite の機能ってどんな時に利用するの?

「機能は分かった。でもなんでわざわざそんな意味不明なことをするの?」

 

と思った方もいるかもしれない。

 

 

どう行った時に利用するのかというと、ドメインを移転する場合によく使う。

 

たとえば、サッスーはこのブログを運営している。

 

http://seiko.go-journey.net

 

このドメインを「http://example.com」に変更したい(移転したい・引っ越したい)

と思ったとする。

変えることは今すぐできる。

 

しかし、今まで「http://seiko.go-journey.net」で頑張ってきて、

SEO対策も施し多少のアクセスが集まるようになっているので、

このアクセスも無駄にしたくない。

 

 

 

だから、新しくサイト「http://example.com」を作ることは作るんだけど、

同時に「http://seiko.go-journey.net」へアクセスしに来た人も

http://example.com」にリダイレクトしてアクセスさせたい。

 

そんな時に使える(使う)のである。

 

 

では、具体的にどうするの?どう設定するの?であろうか。

 

 

 

 

 

Apache のインストールと mod_rewrite モジュールの有効化

 

mod_rewriteはApacheのモジュールなので、まずはApaheをインストールする。

 

サッスーはCentOSを使っているので、インストールはyumコマンドで行う。

 

$ sudo yum install httpd

 

これでインストール完了。

もっと細かく設定を変えてインストールすることもできるし、

ソースファイルからコンパイルする方法もあるけど、

その必要はないと思う(笑)

 

 

Apache をインストールしたら、

mod_rewrite モジュールを使えるようにしなければいけない。

 

 

 

モジュールはロードしなければ使えないので、

Apache 起動時 にmod_rewrite モジュールをロードするように設定を入れる。

 

/etc/httpd/conf/httpd.conf ファイルを開き、以下の修正をする。

 

#LoadModule rewrite_module modules/mod_rewrite.so

 

↓コメントアウトされていたら、コメントを外す

 

LoadModule rewrite_module modules/mod_rewrite.so

 

この後、Apacheを再起動したら、mod_rewrite モジュールをロードすることができる。
※OSの再起動は不要。

CentOS 6の場合
$ sudo service httpd restart

CentOS 7の場合
$ sudo systemctl restart httpd.service

 

 

 

 

 

設定ファイルにリライトルールを書いてみる

 

※ちなみに、そもそもこの記事はmod_rewriteとは何なのか?

というテーマで始まっているので、

実際にmod_rewriteモジュールで一番多く使われるであろう、

redirectディレクティブの設定まで解説する。

 

 

 

mod_rewrite の設定ファイルは2種類ある。

 

 

1.httpd.conf ファイルに設定を書く

2..htaccess ファイルに設定を書く

 

 

 

 

今回は、httpd.conf ファイルに設定を書くやり方を説明する。

 

先ほど出てきた例で設定ファイルを書いてみる。

【例】
http://example.com/service/foo.txt へアクセスが来たら、
http://sample1.com/service/foo.txt へ転送したい。

その場合は、/etc/httpd/conf/httpd.conf ファイルを変更する。

 

※ちなみに、httpd.conf ファイルは必ず

/etc/httpd/conf ディレクトリにあるかと言うと、そうではない。
インストールの仕方によって場所が変わるので注意。

 

そして、以下のように行を追加する。

 

Redirect    /service/foo.txt    http://sample1.com/service/foo.txt

 

※フォントの関係でスペースが分かりづらくなるかと思って、スペースを多めに入れている。

 

解説
あらかじめ、「http://sample1.com」ドメインを持っていたとする。
クライアントが、http://example.com/service/foo.txt へアクセスする。

それが、「Redirect   /service/foo.txt」の部分で、
リダイレクト先が「http://sample1.com/service/foo.txt」で指定されている。

 

これで http://example.com/service/foo.txt へアクセスが来たら、
http://sample1.com/service/foo.txt  へ転送することができる。

 

 

 

 

用語

よくディレクティブという用語が出てきた。

ディレクティブとは、Apache上で実行できる命令、コマンドの意味である。
他には、プログラミングにおいてコマンドのような意味で使われる用語であり、
プログラミング言語の一部の構成要素
(例えば、コンパイラやアセンブラに処理方法を指示する記述など)を指す
という意味もあるそうだ。

 

 

 

最後に

サッスー

結構 Apache の勉強になった。

自分で調べて自分なりに解釈したり表現すると、自分も理解できるし非常にいいと思った。

これからも勉強のために更新や情報を追加をしていきたい。

 
 
 

コメントを残す

メールアドレスが公開されることはありません。