- 締切済み
httpd.confのURLリライトについて
httpd.confのURLリライトについてご質問です。 環境 CentOS5.2 Apache 2.2.3 tomcat 5.5.25 Apacheとtomcatの連携でWebサーバを作成しております。 httpd.confでURLリライト設定をしておりますが、リライトが行われません。 以下httpd.confの設定内容です。※AAをBBにリライト AcceptPathInfo On RewriteEngine On RewriteRule BB AA [R] また.htaccessも試したのですが同じ結果です。 (httpd.confはAllowOverride Allとしてあります。) 設定後のApache、tomcatの再起動も行っております。 どなたか、原因に心当たりのある方、いらっしゃいますでしょうか?
- みんなの回答 (6)
- 専門家の回答
みんなの回答
えーっと、tomcatを使用しているのですか? tomcatをポート8080でListenしており、 直接tomcatに接続しているように見えるのですが、 現状、ポート8080はapacheがListenしているのですか? 本来、apache+tomcatはポート80でapacheにリクエストし、 apacheがtomcat:8080へフォワードするのが一般的です(注:tomcatはずいぶん前に使ったことがあるだけなので、正確な答えではないかもしれません ※1) よって、URLにポート8080を記述する必要はないはずです つまり、URLに8080を付けたがために、apacheの処理を一切すっとばしてtomcatがブラウザへ応答している(応答があるならばですが)と思われます まず、8080をつけずにアクセスしてみて、動作がおかしいのであれば、 tomcatへのフォワーディングの設定がhttpd.confに正しく行われているか確認してください(注:※1に同じ) 現状、ポート8080でアクセスしているならば、私の予想では、apacheのaccess_logに一切記録されずにtomcat側のログにのみ記録が残っていると思われます これが、80でアクセスすることで、apacheのaccess_logとtomcatのログ両方に記録が残って正常にブラウザにレスポンスが返ることが、 mod_rewriteの解決より先にすべきことですね >htaccessにわざと書式エラーとなる1行・・ AllowOverwrite Allにして、上記でエラーが出ない以上、apacheを経由していないですね
>ファイルは出来ましたが、 ファイルが作成された以上、mod_rewriteは動いていますよ htaccess自体が有効になっていないのでは? htaccessにわざと書式エラーとなる1行を追加して、 該当のページにあくせして、error_logにエラーが出力されていない場合、 htaccess自体無効になっている可能性があります まず、httpd.confの 該当ディレクトリに対して AllowOverwrite None になっていたりしませんか? なっていたら AllowOverwrite All にしてテストしてみてください
補足
現在httpd.confの内容を以下のように変更しましたが、やはり 変換は行われず、ログも更新されません。 htaccessにわざと書式エラーとなる1行を追加してもログは更新されませんでした。 <Directory /usr/local/tomcat/webapps/webapp/> AllowOverride All Options All AcceptPathInfo On RewriteEngine On RewriteCond %{QUERY_STRING} para=0 RewriteRule ^(.*)$ $1? [L] </Directory> RewriteLog /var/log/rewrite.log RewriteLogLevel 9
>mod_rewiriteの機能自体が現在有効になっていないように思われるので mod_rewriteは変換過程をログに残すことができます httpd.confへ RewriteLog /var/log/rewrite.log RewriteLogLevel 9 を記述してログを確認してみてください 変換されなくても、rewriteが動いていればログは出ます
補足
たびたび申し訳ありません。 上記の記述を追加して実行した所、rewrite.log ファイルは出来ましたが、中身は空で更新されません。 RewriteEngine On以前にmod_rewriteを使う為に 何かが足りないのでしょうか?
>Mod Rewrite自体が有効になってないようにも思えますが、 え? RewriteEngine On この1行が無いということですか? もちろん、mod_rewiriteを使うためには、 必ずOnにしなければならないのは当然なので省略しましたよ >RewriteRule http://xxx.xxx.xxx.xxx:8080/webapp/IP1200.jsp http://xxx.xxx.xxx.xxx:8080/webapp/IP1200.jsp?para=0 に対して置き換える前提で回答しました Onにせずにテストしたなら、Onにしてください
補足
>RewriteEngine On >この1行が無いということですか? いえ、もちろん常に RewriteEngine On の一行はあります。 そうではなくて、RewriteEngine Onの記述があっても mod_rewiriteの機能自体が現在有効になっていないように思われるのです。判りにくくて申し訳ありませんでした。
RewiteCond %{QUERY_STRING} para=0 RewriteRule ^(.*)$ $1? [L] でどうでしょう?
補足
上記の方法で試してみましたがやはり駄目でした。 Mod Rewrite自体が有効になってないようにも思えますが、 原因がわかりません…。
具体的にどのようなリクエストにたいして、 具体的にどのようなRewiteRuleを設定したのかを 質問に書かないと答えれないですよ・・・ ただでさえRewriteRuleは正規表現で、 パターンが無限にあるため この部分を省略されると、答えようがないですね~ とりあえず、AcceptPathInfo はOffにしてみたら? と答えておきます
補足
失礼致しました、RewiteRuleは現在以下のように設定しております。 RewriteEngine On RewriteRule http://xxx.xxx.xxx.xxx:8080/webapp/IP1200.jsp http://xxx.xxx.xxx.xxx:8080/webapp/IP1200.jsp?para=0 ?para=0をリライトによりなくそうとしています。 AcceptPathInfo はOffにしても結果は同じでした。
補足
どうもありがとうございます。 ご指摘の通りtomcatとapacheの連携ができていなかった様です。 まずはこちらの問題を解決しようと思います。