- ベストアンサー
mod_rewriteを使用するための設定について
- mod_rewriteの設定についてアドバイスいただきたいと思います。今までレンタルサーバーで.htaccessを使って、動的URLを静的URLでアクセスさせることに用いていたのですが、自前サーバーにその.htaccessファイルを移してみたところ、思ったような動作をしてくれません。
- .htaccess側の問題ではなくApache側の問題だと思っております。どなたかアドバイスの程よろしくお願いいたします。
- mod_rewriteの設定についてアドバイスをお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>ドキュメントルートで試してみたところ、.htaccessとmod_rewrite動きました。でもユーザーディレクトリでは動かないんです。 ということは、httpd/mod_rewrite.so 自体には問題がないわけです。 RewriteLog を取って、本当に「動かない」のか、確かめることをおすすめします。実は、単に RewriteCond が成立していない、とか。 あと、httpd.conf や .htaccess をいじる時には、一気に数箇所を変更せず、ひとつずつ変更してチェックすれば、おのずと問題が特定されるでしょう。
その他の回答 (4)
- vsba23895
- ベストアンサー率58% (18/31)
>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 をフルに取って、何が起こっているかログを調べないと分りません。
補足
稼動している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 の表示が・・・なんか混乱してきました。
- vsba23895
- ベストアンサー率58% (18/31)
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 の記述をしてみたのですが、こうすると「表示が認められていません」になってしまいます。
- vsba23895
- ベストアンサー率58% (18/31)
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 になっています。他にまだ設定箇所があるのでしょうか?問題点がずれてきて申し訳ございません。
- vsba23895
- ベストアンサー率58% (18/31)
まず 当該 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側の設定ミスなんでしょうか?
お礼
いろいろありがとうございました。 まだまだ勉強不足のようです。 がんばってみます。