LASTUPDATE 2004年07月28日
□mod_rewrite
とはapacheで用いられる モジュール の一種である。
モジュールとはapacheの機能を拡張するものであり、初期状態のapacheには複数のモジュールが初期状態で追加されている。今回の題材である mod_rewrite
は Vine Linux 2.5(2.6) に付随しているRPMパッケージ版 apache
1.3系 には標準で含まれていた。
本題に入ろう。mod_rewrite とは一体何者なのだろうか? 安易な例で申し訳ないのだが、直感的に理解して貰う為に次の例を述べる。
ex )
http://hoge.hoge/main/index.php?id=389834
というURLをもつページにアクセス可能であるとして。(ページ1とする)
http://hoge.hoge/389834 や http://389834.hoge.hoge/
というURLへのアクセスで、前記のページ1を表示させたい場合(何故ならば大抵は短いURLの方が喜ばれるから)貴方はどのようにするのだろうか? このような問題に直面した時の1つの解答として
mod_rewrite が存在する。
mod_rewrite は貴方が記述した書式に一致するアクセス(ex http://hoge.hoge/続いた数値 という条件) を貴方が求めているURL(http://hoge.hoge/main/index.php?id=続いた数値
) に書き直し(rewrite)てくれる。
□ インストールの手順や apache のDSOについて。又は apache 2.0 系における動作等は一切考慮していない。貴方の環境で mod_rewrite
を実行できるかをチェックする為には fgrep LoadModule httpd.conf | fgrep rewrite_module あたりを実行してみてもらいたい。
httpd.conf が何処にあるのかが分からなければ locate httpd.conf や find / -name \*.conf -print あたりを実行してみてはどうだろうか。
□ また、無料(有料)のレンタルサーバを利用している場合、大抵は httpd.conf を編集できないが .htaccessファイル に記述する事によって
mod_rewrite を利用する事ができるかもしれない。詳しくは管理者に問い合わせる事。
□ (間違いの指摘は lange@style.ne.jp まで御願いします)
□ メモ一覧
目次
+ mod_rewrite の記述(httpd.conf or .htaccess)
+ 外部からの直接リンクを(直リンク)を防ぐ。
+ 外部からの直接リンクを(直リンク)を防ぐ(画像)。
+ アクセスしたディレクトリを違う場所に書き直す。
+ サブドメインアクセスを適切なURLに書き直す。
+ mod_rewrite の記述(httpd.conf or .htaccess)
利用に先立って RewriteEngine On を使う。詳しい説明はココでご覧頂く事にして大抵使われるであろう
RewriteRule と RewriteCond を説明してみる。
RewriteRule 実際の書換を担当します。(途中)
+ 外部からの直接リンクを(直リンク)を防ぐ。
例: http://hoge.hoge/test/ に対する直リンクを防ぐ。(ドキュメントルートが /home/htdocs の場合)
http://hoge.hoge/ からのアクセスのみを許可する。
<Directory /home/htdocs/test>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://hoge\.hoge/.*$ [NC]
RewriteRule ^(.*)$ - [F]
</Directory>
.htaccess の場合は /home/htdocs/test にファイルを置けば終わり。
+ 外部からの直接リンクを(直リンク)を防ぐ(画像)。
例: http://hoge.hoge/test/ の画像に関して直リンクを防ぐ。
<Directory /home/htdocs/test>
<Files ~ "\.(gif|jpe?g|png)$">
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://hoge\.hoge/.*$ [NC]
RewriteRule ^(.*)$ - [F]
</Files>
</Directory>
もしくは RewriteEngine で全てをすませたいなら(画像指定を Files でしない)
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)\.(gif|png|jpe[|g])$ [NC]
RewriteCond %{HTTP_REFERER} !^http://hoge\.hoge/.*$ [NC]
RewriteRule ^(.*)$ - [F]
てな感じかな(動作未確認(汗))
+ アクセスしたディレクトリを違う場所に書き直す。
例: http://hoge.hoge/abc のアクセスを http://hoge.hoge/def にする。
RewriteEngine On
RewriteRule ^/abc ^/def [R]
+ サブドメインアクセスを適切なURLに書き直す。
例: http://lange.style.ne.jp のアクセスを http://www.style.ne.jp/in.php?no=lange にする。
( httpd.conf or .htaccess )
バーチャルホストで定義する
<VirtualHost xxx.xxx.xxx.xxx>
ServerName style.ne.jp
ServerAlias *.style.ne.jp
ServerAdmin info@style.ne.jp
RewriteEngine On
RewriteCond %{HTTP_HOST} ([^\.]+).*
RewriteRule ^/$ /in.php?no=%1 [R]
</VirtualHost>
こっそり観やすく作り直し。