QA@IT

ApacheのRewriteRuleで除外URLを設定したい

7020 PV

度々失礼します。

Apache2.2+Tomcat6+SAStrutsでWEBアプリを作成しています。
サーバ側でドメインルートの設定をし、下記の設定でうまく行っているのですが、
Ajax通信の処理のパラメータが全てサーバに到達すると消えてしまいます。

   ・httpd/conf/httpd.conf
   (以下を追記。)
   <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteRule ^/app/(.*)$ /$1 [R]
   </IfModule>
   Include conf/extra/httpd-proxy.conf

   ・httpd/conf/extra/httpd-proxy.conf
   (以下を記入。)
   ProxyPass / ajp://localhost:8009/app/

色々調べたら、AjaxのContentTypeを正しく設定すれば良いようなのですが、
開発環境まわりや、FileUpload関連もあり、AjaxはAJP連携させずに、、「アプリ名の入ったURL」で通信させたいと思っています。
(→アプリの入ったURLでは正常に動作します)

一応、システムで使っているAjaxは、画面遷移のActionクラスとは別階層にしており、
固定でこのURLパターンの場合は、「ドメインルートのURL」に書き換えないようにしたいです。

 一般Action : http://xxx.com/app/XXXXX
 AjaxAction : http://xxx.com/app/ajax/XXXXX

下記で、「アプリ名の入ったURL」は「ドメインルートのURL」に書き換えて、リダイレクトさせてます。
(jsessionIdがJSTLタグを使うと必ず入ってしまう現象もありましたが、カスタムタグを作って回避しました。)

   ・httpd/conf/httpd.conf
     RewriteRule ^/app/(.*)$ /$1 [R]

↑このように定義している為、階層が増えても、全て「ドメインルート無しのURL」に書き換えてくれます。

     RewriteRule ^/app/ajax/(.*)$ /app/ajax/$1 [R]

試しに↑これでやってみたのですが、書き換わっていないようでした。

何かうまい方法はないでしょうか?
よろしくお願いいたします。

  • 実現されたいことは、/ajaxがURLに含まれる場合は、URLに何もせず、そのままTomcatと通信するということでよいでしょうか? -
  • y-moriさん

    ありがとうございます。
    長々と書いてしまいましたが、ご指摘の通りです。。
    -

回答

以下で、目的達成できないでしょうか?

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !^/app/ajax/(.*)$
  RewriteRule ^/app/(.*)$ /$1 [R]
</IfModule>
編集 履歴 (0)

y-moriさん ありがとうございます。

適切なご助言ありがとうございました。
下記をコメントアウトしていた為、AJP連携がされていませんでした。
(当然ですね。。)

お蔭様で繋がるようになりました。
心から感謝しております。

ProxyPass ajp://localhost:8009/app/

編集 履歴 (0)

失礼しました。

下記を記入しないと、AJP連携されないですね。
確認します。

<IfModule mod_proxy_ajp.c>
 <Location /app/>
  ProxyPass ajp://localhost:8009/app/
 </Location>
</IfModule>
編集 履歴 (0)

ありがとうございます。

確かめてみたのですが、効いていませんでした。
Tomcat.logを見る限り、Actionにも到達していないような気がします。
パス構成は間違っていないと思うのですが。

Webで調べて、RewriteCondは、RewriteRuleの後に読み込まれるので、
下記のように2箇所で確認したのですが。。

◆httpd.conf
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !^/app/ajax/(.*)$
  RewriteRule ^/app/(.*)$ /$1 [R]
  RewriteCond %{REQUEST_URI} !^/app/ajax/(.*)$
</IfModule>
Include conf/extra/httpd-proxy.conf

◆extra/httpd-proxy.conf
ProxyPass /       ajp://localhost:8009/app/
編集 履歴 (1)
  • ProxyPass の内容はどうなっていますか? -
  • たびたび、ありがとうございます。
    省略してしまいました。
    ↑上記、編集しました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。