葛藤・悶絶なる日々

私ratoが業務で勉強になったなぁ。これはノウハウですなぁと思ったことや私生活な事を書き綴っていこうと思います

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |

Apacheの{REQUEST_FILENAME} -fにハマった

今までApacheの{REQUEST_FILENAME} -fの所でいつもつまづいていた。
今回もApacheの設定が自分の担当だったので、こいつが必要になった。
んで、今回はわりとこの設定に時間がさけて、なんとなく設定方法を自分なりにあみだした(これが正しい使い方かわからないw)ので忘れないように書いておこうと思う。

今回の要件をザックリ説明
・ApacheとJBossの連携
・静的ページ(画像ファイル、静的html)はApacheで処理 mod_rewriteを使用
・動的ページに関するGETパラメータ等はJBossで処理 mod_proxyを使用
というカンジである

で説明するために必要な単語を作っておこう。
ホスト: localhost ←そのまんまじゃんとか言わない
JBoss側のコンテキストルート:jbossapp ←適当すぎるだろとか言わない
静的ページ:foo.html
動的ページ:bar.html
という風に定義しましょう。

私の環境としては
APACHE_HOME=C:\Program Files\Apache Software Foundation\Apache2.2
JBOSS_HOME=C:\jboss-5.0.1.GA
APACHE_DOCUMENT_ROOT=C:\www
となっております。

では本題!
http://localhost/foo.htmlは静的ページ
http://localhost/bar.htmlは動的ページなので僕が書いたRewriteRuleは以下になりました。
*ちなみにRewriteRuleはAPACHE_HOME\conf\extra\httpd-rewrite.confに記述しました。



httpd-rewrite.conf

# 1
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ $1 [QSA,L]

# 2
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^/contextName/(.*)$ ajp://localhost/jbossapp /$1 [QSA,P]
RewriteRule ^/(.*)$ ajp://localhost/jbossapp /$1 [QSA,P,L]




1の方が静的ページ用2の方が動的ページ用です。
1.まずRewriteCondのREQUEST_FILENAMEはURLではなくサーバ上のパスを見にいっている感があります。なのでRewriteCondを%{REQUEST_FILENAME} !-fではなく、%{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-fとすればドキュメントルート以下にファイルがあった場合となります。
それをURLとしてRewriteRuleで^/(.*)$として全てを受け取り、$1で全てを書き換えるとすれば静的ページが表示される処理になります。この場合URLの書き換えはおこなっていませんが、ファイルパスからURLに書き換えてる?とか思ってください。自分もよくわかりませんw

2の方はRewriteCondが1の逆で-fの前に!がついています。これはドキュメントルート以下にファイルがなかった場合となります。
そのあとにプロトコルをajpにするためにプロクシーを使うという意味でPオプションがついています。
そしてGETパラメータがあった場合の為にQSAオプションがついています。
QSAオプションがないとURLの後ろにhttp://localhost/bar.html?hoge=10とかあってもリライトされた段階でhttp://localhost/bar.htmlになってしまいます。

以上です^^

ちなみにその時のmod_proxyを載せておきます。参考までに


httpd-proxy.conf

ProxyPass ajp://localhost:8009/
ProxyPass ajp://localhost:8080/





Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集
(2008/09/26)
Ken CoarRich Bowen

商品詳細を見る
スポンサーサイト

テーマ:雑記 - ジャンル:日記

Apache | コメント:0 | トラックバック:0 |
<<S2JDBC-GenでMySQLのtinyintがBooleanにならない人は | ホーム | MySQLでのboolean型の扱い>>

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。