プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
mod_rewriteの設定についてアドバイスいただきたいと思います。
今までレンタルサーバーで.htaccessを使って、動的URLを静的URLでアクセスさせることに用いていたのですが、自前サーバー(FedraCore2.0+Apache2.0.53)にその.htaccessファイルを移してみたところ、思ったような動作をしてくれません。色々なサイトを参考に見て回ったところ、「httpd.conf」が怪しいと感じたのですが、

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so

の箇所もコメントアウトされておりますし、過去ログにもあったバーチャルホストの併用もしておりません。
ちなみに.htaccessは下記のような内容です。

DirectoryIndex index.htm index.php .ht
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^doc-([0-9]+).htm+ doc.php?number=$1

レンタルサーバーでは問題なく動作しておりましたので、.htaccess側の問題ではなくApache側の問題だと思っております。どなたかアドバイスの程よろしくお願いいたします。

A 回答 (5件)

>ドキュメントルートで試してみたところ、.htaccessとmod_rewrite動きました。

でもユーザーディレクトリでは動かないんです。
ということは、httpd/mod_rewrite.so 自体には問題がないわけです。
RewriteLog を取って、本当に「動かない」のか、確かめることをおすすめします。実は、単に RewriteCond が成立していない、とか。
あと、httpd.conf や .htaccess をいじる時には、一気に数箇所を変更せず、ひとつずつ変更してチェックすれば、おのずと問題が特定されるでしょう。
    • good
    • 0
この回答へのお礼

いろいろありがとうございました。
まだまだ勉強不足のようです。
がんばってみます。

お礼日時:2006/07/07 00:34

>httpd -L ではmod_rewrite 関連が表示されません。


>#/usr/sbin/lsof -c /httpd/ |grep -i mod_rewrite ではusr/lib/httpd/modules/mod_rewrite.so の表示があります。

それなら LoadModule で mod_rewrite を読み込んだら、httpd -L で出て来る筈ですが、変ですね。
念のため確認ですが、%which httpd で出て来る httpd と、lsof の(同左中の) httpd のは、本当に同じもの(同じ path)ですか ?

どうも httpd.conf の方の問題のように思えますが、編集中の httpd.conf が、本当に実際に動いているhttpd が読んでいるものかどうか、意図的にエラーになる文字列(何でもいい)を入れて見て httpd -t とか apachctl restart とかしてチェックしてはどうでしょう。

これらが同一であるなら、RewriteLog をフルに取って、何が起こっているかログを調べないと分りません。

参考URL:http://www.net-newbie.com/trans/mod_rewrite.html …

この回答への補足

稼動しているhttpdに対するhttpd.confは間違いないようです。意図的にエラーを出すことは可能でした。
ドキュメントルートで試してみたところ、.htaccessとmod_rewrite動きました。でもユーザーディレクトリでは動かないんです。本当にすいません。モジュール側の問題でなく完璧にhttpd.confの設定ミスですね(汗

設定は
#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
をコメントのままにして、
<Directory /home/*/public_html>
Options Includes ExecCGI
</Directory>
を付け足しています。
上記のコメントをはずすと、Internal Server Errorが表示されます。ログを見ると./htaccess: DirectoryIndex not allowed here の表示が・・・なんか混乱してきました。

補足日時:2006/07/03 18:56
    • good
    • 0

httpd -L で RewriteEngine その他の mod_rewrite 関連が表示されないとしたら、その mod_rewrite.so が読めていないので


#/usr/sbin/lsof -c /httpd/ |grep -i mod_rewrite
して、mod_write が実際に組み込まれているか確かめた方がいいかと。
読めていないなら、パーミションか LD_LIBRARY_PATH の問題等が考えられます。。

.htaccess が効かないのは、よくあるケースでは、.htaccess のパーミション。この場合は、ログに .htaccess unreadable と出ている筈。

この回答への補足

いつもありがとうございます。

httpd -L ではmod_rewrite 関連が表示されません。#/usr/sbin/lsof -c /httpd/ |grep -i mod_rewrite では/usr/lib/httpd/modules/mod_rewrite.so の表示があります。

ログを見たところ .htaccess: DirectoryIndex not allowd here になってます・・・試したところ、DocumentRootでは.htaccessが動作し、UserDirでは動作しません。色々調べて <Directory /home/*/public_html> 内に AllowOverride ALL の記述をしてみたのですが、こうすると「表示が認められていません」になってしまいます。

補足日時:2006/07/03 15:54
    • good
    • 0

mod_rewrite.so が /usr/libexec (とか、Fedora 知りません)にもないとしたら、apache (httpd) を作り直すしかないと思います。


ソースを http://www.apache.org/ からダウンロード・展開して、
./configure --prefix=/usr/local/apache --enable-proxy -enable-rewrite --enable-so (この他 --enable-deflate --disable-autoindex もお薦め) で config して、あとは
make, make install
で簡単に /usr/local/apache 以下にインストールできると思います。
その上で、/usr/local/apache/conf/httpd.conf を書き直し、
/usr/local/apache/bin/apachectl start
です。

この回答への補足

探したところmod_rewrite.soは /usr/lib/httpd/modules にあるようです。

すいません。そもそも.htaccessが使えるかどうか、アクセス制限をかけてみたところ、そもそもこちらが動作してないようです。かといって httpd.conf の設定もAllowOverride All になっています。他にまだ設定箇所があるのでしょうか?問題点がずれてきて申し訳ございません。

補足日時:2006/07/03 03:50
    • good
    • 0

まず 当該 apache (httpd) で mod_rewrite が使えるようになっているか


%/usr/local/apache/bin/httpd -l |grep rewrite
で確かめて下さい。 (パスは適当に正しいものに置き換えて)

>LoadModule rewrite_module modules/mod_rewrite.so
>LoadModule proxy_module modules/mod_proxy.so
>の箇所もコメントアウトされておりますし

mod_so (ダイナミックなモジュールのロード) が生きていて、且つ上記のコメントアウトが行なわれているのであれば、正にそのコメントアウトのために mod_rewrite モジュールがロードされておらず、使えない、という状況だと思いますが…

この回答への補足

早速の回答ありがとうございます。
すいません。書き方間違ってました^^;
「コメントアウトされておりますし」→「コメントアウト外しました」

アドバイス頂きました様にパスを直し、
%/usr/sbin/httpd -l |grep rewrite
したのですが、rewriteにマッチする箇所は無いようです。mod_so.cという部分はありますね。やっぱりapache側の設定ミスなんでしょうか?

補足日時:2006/07/02 17:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!