My Photo

« WEBページのタイトルとURLを一発コピーするFirefoxのアドオン | Main | 釣り番組まとめ »

October 25, 2013

UbuntuサーバのApache2でURLリライトを試してみる

ディストリビューション、OSの情報を取得する

セキュリティの本のテスト環境として付録CD-ROMに入っていたVMwareの仮想OSでURLリライトを有効にしてみる。
まず、ディストリビューション、Apacheのバージョンを確認してみた。

root@aaaa:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.1 LTS
Release:        10.04
Codename:       lucid
root@aaaa:~# uname -a
Linux aaaa 2.6.32-24-generic-pae #39-Ubuntu SMP Wed Jul 28 07:39:26 UTC 2010 i686 GNU/Linux
root@aaaa:~# apache2ctl -v
Server version: Apache/2.2.14 (Ubuntu)
Server built:   Apr 13 2010 19:28:27
root@aaaa:~# 

ディストリビューションはUnbuntu 10.04.1だった。
lsb_release のLSBとは "Linux Standard Base" の略で、多くのディストリビューションはこのLSBに準拠している。準拠していれば lsb_release コマンドでディストリビューションの情報を取得できる。
"uname -a" の2つ目の項目はホスト名。
apache2ctl はApacheのバージョンを調べたりできる。-M オプションでロードされているモジュールを列挙する。

mod_rewriteを有効にする

Apache2の設定ファイルは /etc/apache2 以下にあって、大本の設定ファイルは apache2.conf。このファイルからさらにいろんな設定ファイルがインクルードされている(参考3,4)。
サーバ管理者が設定を追加する場合は httpd.conf に書き加える。初期状態で httpd.conf は空である。apache2.conf や他の設定ファイルは基本的には触らないらしい。
デフォルトではURLリライトのモジュールmod_rewriteは有効になっていない。
mode_rewrite を有効にするには設定ファイルを手で編集するのではなく、以下のコマンドを使用する(参考5)。このコマンドの名前は "Apache2 enable module" ということかな。

sudo a2enmod rewrite

すると /etc/apache2/mods-available ディレクトリに rewrite.load が作成され、/etc/apace2/mods-enabled ディレクトリに rewrite.load へのリンクである rewrite.conf が作成される。
そしてサーバを再起動。以下のコマンドを実行。

sudo /etc/init.d/apache2 restart

URL書き換えルールの記述

URLリライトの書き換えルールはApache2の設定ファイルか、URLの書き換えをしたいディレクトリの .htaccess に書き換えルールを記述する。
<ドキュメントルート>/test/rewrite に下記の内容の .htaccess を作った。

RewriteEngine ON
RewriteBase /test/rewrite

RewriteRule ^index.html$|^$ top.html [L]

RewriteRule ^y.*$ http://www.yahoo.co.jp/ [R,L]

RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteRule ^.+$ ie.html [L]

実際の運用は想定しておらず、単に試してみようと思っただけ。以下のような書き換えを期待した。

書き換え前書き換え後備考
1/test/rewrite/index.html/test/rewrite/top.html
2/test/rewrite/ /test/rewrite/top.html
3/test/rewrite/y.*http://www.yahoo.co.jp/301リダイレクト
4IEの場合/test/rewrite/ie.html1,2,3以外でIEの場合

しかし、実際にはIEで1,2の書き換え前にアクセスすると想定通りにはならず、4の書き換え後の ie.html が表示される。3の書き換え前にアクセスした場合は想定どおりyahooにリダイレクトされる。
ググって調べたところ、.htaccess や apache2 設定ファイルの "<Directory>" 内にURLリライトのルールを書いた場合、書き換えられたURLはさらに頭から書き換えルールを適用されてループするそうだ(参考12)。ループが止まるのは書き換えの必要がなくなるか、ループ回数の上限に達してエラーになるまで。
よって、1,2の場合では想定どおり1,2のルールで top.html に書き換えられる(1回目)。その後にまた頭から書き換えルールが適用されて4のルールで ie.html に書き換えられる(2回目)。そしてまたさらに頭から書き換えルールが適用されて、今度はマッチするものがないのでそこでURLリライトは終了する(3回目)。
3のルールは1度適用されると外部サイトに転送されるのでそこでURLリライトは終わり、想定どおりの結果となる。
うーん。"[L]" でURLリライトのループは防げるもんだと思ってたんだが、"[L]" は1つの設定の中でマッチしたらそれ以降は無視という意味で、書き換えルール全体を再適用することには関係ないようだ。難しい。
以下のように修正したら、想定どおりに動いてくれた(参考13)。4行目の内容を追加した。
'-' は置換禁止を意味する。これでなんでループが止まるのか良くわからないが。

RewriteEngine on
RewriteBase /test/rewrite/

RewriteRule ^top.html - [L]

RewriteRule ^index.html$|^$ top.html [L]

RewriteRule ^y.*$ http://www.yahoo.co.jp/ [R,L]

RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteRule ^.+$ ie.html [L]

RewriteLogの設定

前記のように最初はURLリライトが想定どおりに動かなかった。そこで、調査のためにURLリライトのログを出力するようにした。
RewriteLog,RewriteLogLevel を設定に追加するのだが、mod_rewriteのリファレンスを見ると

  • RewriteCond,RewriteRule などのContext:server config, virtual host, directory, .htaccess
  • RewriteLog,RewriteLogLevel のContext:server config, virtual host

とある。.htaccess に書いても動かない。
編集するファイルは /etc/apache2/httpd.conf である。内容は以下。

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3

RewriteLogLevel の後ろの数字が大きいほど詳細なログを吐くが、実際2とか3で十分らしい。
また、パフォーマンスが悪化するのでテストの時以外は基本はURLリライトのログ出力は止めるべきである。

ftpサーバのインストール

VMware上のUbuntuサーバとWindowsとの間でファイルをやりとりするためにFTPサーバをインストールした。
起動/停止は以下のコマンド。<コマンド>は start/stop。

service vsftpd <コマンド>

参考サイト:
・lsb_release,unameについて
1.超初心者がubuntuでWebサーバーを作る
2.unameコマンド|Linuxコマンド
・UbuntuサーバのApache2について
3.超初心者がubuntuでWebサーバーを作る
4.Apache 2.2 設定 Ubuntu Server: IT備忘録
5.Apache2 mod_rewrite と AllowOverride | マキシマ文庫
・mod_rewriteのリファレンス
mod_rewrite - Apache HTTP Server
・URLリライトの設定について
6..htaccessのRewriteCond、RewriteRule:超初心者向けメモ|ぼくんちのバックステージ
7.Apache : mod_rewriteリファレンス - dawgsdk.org
8.mod_rewriteの考え方。 - こせきの技術日記
9.Apache module mod_rewrite
10.Apache Rewrite 設定のサンプル(1) : 個別のURLを転送する | OSCALOG
11.ApacheウェブサーバーのRewrite設定で使える正規表現サンプル集 | Web担当者Forum
12..htaccess ファイルで mod_rewrite の設定をする時の注意点 | ミヤビッチの穴
13., mod_rewriteによるURLの書換えに関するメモ - 忘れたときに備えた記録(2007-07-18) 14.ユーザーエージェントを利用したデバイスの振り分け[Apache,mod_rewrite,.htaccess] | yama-log
15.【apache】mod_rewriteの設定について|My ProjectWEB
16.mod_rewriteの[L]フラグの挙動がよくわかりません。 下記のよう.. - 人力検索はてな
・ftpサーバについて
17.Ubuntu 10.04 LTS - FTPサーバー - Vsftpd インストール : Server World
18.[ubuntu][さくらVPS]vsFtpdインストール | ino Hanging Around

« WEBページのタイトルとURLを一発コピーするFirefoxのアドオン | Main | 釣り番組まとめ »

Linux」カテゴリの記事

プログラミング、技術情報」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/58448377

Listed below are links to weblogs that reference UbuntuサーバのApache2でURLリライトを試してみる:

« WEBページのタイトルとURLを一発コピーするFirefoxのアドオン | Main | 釣り番組まとめ »

September 2017
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof