Apache-Tomcat連携を行いつつ、静的URLを生成する方法(mod_rewrite使用)

ApacheとTomcatの連携を行う際には、「mod_proxy」を利用する方法が一般的です。

これは、以下のように記述すると、

  • あるディレクトリ配下にあるリソース(画像やJavaScript、cssが多い)へのリクエストはApacheに処理を任せる。
  • それ以外のリスクエストはそのままajpプロトコルでTomcatに転送する。

といったことが比較的簡単に実現できるためです。

↓↓↓「mod_proxy」を有効にして、httpd-proxy.conf等に記述↓↓↓

ProxyPass /resource/ !
ProxyPass / ajp://localhost:8009/

しかし、もう少し複雑なURL書き換えを行おうとすると、「mpd_rewrite」を使用する必要が出てきます。

例えば、SEOを考慮して、動的なURLではなく、静的なURLを使用したいと考えたとしましょう。

つまり、「http://site/?kw=aaaa&cate=bbb」のようなURLではなく、「http://site/kw/aaaa/cate/bbb」でアクセスできるようにすることで、 検索エンジンに静的なURLだと認識してもらう手法です。

しかし、「mod_proxy」では、あまり複雑な条件の指定が行えません。

また、proxyしてバックエンドに引き渡されるURLが自動でURLエンコードされてしまうため、「?」などの記号や日本語などのハンドリングが非常に繁雑になってしまいます。

そこで、正規表現による複雑な条件指定が可能で、URLをそのままバックエンドに転送できる「mod_rewrite」の出番となります。

具体的な記述の例は以下の通りです。

RewriteEngine on
RewriteBase /
 
RewriteCond %{REQUEST_URI} !/(.*).(js|ico|gif|jpg|png|css)$
RewriteRule servlet/([0-9A-Za-z)]+) ajp://localhost:8009/servlet/$1 [P,L]
RewriteRule ^cate/(.*)/kw/(.*) ajp://localhost:8009/?cate=$1&kw=$2 [P,L]
RewriteRule ^cate/(.*) ajp://localhost:8009/?kw=$1 [P,L]
RewriteRule ^kw/(.*) ajp://localhost:8009/?kw=$1 [P,L]
RewriteRule ^(.*) ajp://localhost:8009/$1 [P]

このページに、設定ファイルに指定できるオプションが載っていますので、参考にしてみてください。