2009/07/22(水)19:40
mod_rewriteをインストール
Apache1.3系に、理由があって「rewrite」をインストールする。
1.モジュールチェック
# ./httpd -l
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_include.c
mod_autoindex.c
mod_dir.c
mod_cgi.c
mod_asis.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_so.c
mod_setenvif.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec
へーぇ。mod_soはいっているんだぁ。
DSOでインストすんべぇ。
2.ソースコンパイルする
ディレクトリを移動して、モジュールをコンパイルする。
ついでにインストール反映も。
/usr/local/apache/bin/apxs -i -c mod_rewrite.c
あれっ?エラーだぁ。
:
mod_rewrite.c:51 から include されたファイル中:
mod_rewrite.h:91:18: ndbm.h: そのようなファイルやディレクトリはありません
:
ndbm.hが無いのねぇ・・・
3.Includeファイルを探して再コンパイル
find / -name ndbm.h -print
/usr/include/gdbm/ndbm.h
/usr/share/man/man0p/ndbm.h.0p.gz
ndbm.hみーっけ。
それでは再コンパイルだぁ!!
で -a もつけてファイルインストール更新も!!
/usr/local/apache/bin/apxs -i -c -a I /usr/include/gdbm mod_rewrite.c
:
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf
rm /usr/local/apache/conf/httpd.conf.new
:
4.httpd.confのチェック
ちょっと手抜きでチェック
service httpd configtest
Syntax error on line 27 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/libexec/mod_rewrite.so into server: /usr/local/apache/libexec/mod_rewrite.so: undefined symbol: dbm_fetch
げぇ!!・・・シンタックスエラーだぁ。。。
宣言がされていない!?
ライブラリーリンクか!?
5.コンパイル時にライブラリ取り込み
/usr/local/apache/bin/apxs -i -c -a -I /usr/include/gdbm mod_rewrite.c -lgdbm
ポイントは、最後の方の「-lgdbm」です。
もちろん個別にインストールされていない場合はちゃんと入れるべし。
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DMOD_SSL=208123 -DUSE_HSREGEX -DEAPI -fpic -DSHARED_MODULE -I/usr/local/apache/include -I/usr/include/gdbm -c mod_rewrite.c
gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
[activating module `rewrite' in /usr/local/apache/conf/httpd.conf]
cp mod_rewrite.so /usr/local/apache/libexec/mod_rewrite.so
chmod 755 /usr/local/apache/libexec/mod_rewrite.so
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf
rm /usr/local/apache/conf/httpd.conf.new
# service httpd configtest
Syntax OK
今度はうまく行ったみたい。
後は、httpd.confを再調整し、実際に動く所を確認するべし。