5

私の問題

Tomcat のパスと一致しないだけでなく、互いに類似したパスを持つ、動的アプリケーション用の Tomcat への Apache HTTP Server (v2.4.10) プロキシ リクエストが必要です。例えば:

/products/<category>/<sub-category>/<sub-sub-category>/<product-id>.htmlプロキシ先:http://mycluster/pf/<product-id>.html

...そしてまた...

/products/<category>/<sub-category>/<sub-sub-category>/<anything-not-ending-in-html>プロキシ先:http://mycluster/search/<anything-not-ending-in-html>

私の試み

これを処理するために LocationMatch 正規表現を使用しようとしていますが、完全には成功していません。*.html次の LocationMatch 正規表現は、単独で機能します (要求を にプロキシし<tomcat>/pf/*.htmlます)。

<LocationMatch ^/products/(?<cat>.+)/(?<subcat>.+)/(?<subsubcat>.+)/(?<partnum>.+).html>
ProxyPass balancer://mycluster/pf/%{env:MATCH_PARTNUM}.html
ProxyPassReverse balancer://mycluster/pf/%{env:MATCH_PARTNUM}.html
</LocationMatch>

これは、次の例のパスを使用して URL を渡します: /products/aaa/bbb/ccc/ddd3456.html(正しい)

ただし、以下の正規表現も有効にすると:

<LocationMatch ^(?!.*\.html$)/products/(?<cat>.+)/(?<subcat>.+)/(?<subsubcat>.+)((/?)|(./*))$>
ProxyPass balancer://mycluster/search/
ProxyPassReverse balancer://mycluster/search/
</LocationMatch>

/products/aaa/bbb/ccc/404 ページで結果にアクセスしようとしています。ここでは、「/products/aaa/bbb/ccc/」へのリクエストのうち、.html で終わらないものはすべて /search/ に渡されることを期待しています (後続のパス情報を含む: .../search/ など)。比較 )

私の質問

何が悪いのか、よくわかりません。Rubularによると、提供された正規表現は正しいです。

ここで何が欠けていますか?

これを解決するためのアドバイスをいただければ幸いです。

4

1 に答える 1

4

正規表現は少し寛大すぎるようです - .+cat/subcat/subsubcat 内のスコープは少し制限する必要があります。また、最終的な式にわずかなエラーがあります。("./*")これは次のようになります("/.*")

勤務地の一致:

<LocationMatch ^(?!.*\.html$)/products/(?<cat>([A-Za-z0-9\-\_])+)/(?<subcat>([A-Za-z0-9\-\_])+)/(?<subsubcat>([A-Za-z0-9\-\_])+)((/?)|(/.*))$>
ProxyPass balancer://mycluster/search/
ProxyPassReverse balancer://mycluster/search/
</LocationMatch>
于 2014-08-01T08:26:10.193 に答える