[解決済み] Apache LocationMatch Regex
質問
私の問題
Apache HTTP Server (v2.4.10) に、Tomcat のパスと一致しないだけでなく、互いに類似したパスを持つ動的なアプリケーションのリクエストを Tomcat にプロキシさせる必要があります。例えば、以下のようなものです。
/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 regexを使って処理しようとしていますが、完全には成功しません。以下の LocationMatch regex はそれ自体で動作します (プロキシとして
*.html
リクエストを
<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ページが表示されます。
ここで私は、.htmlで終わらない"/products/aaa/bbb/ccc/"へのすべてのリクエストが、/search/に渡されることを期待しています(含まれるべきその後のパス情報を含む:例えば .../search/compare )。
質問
何が問題なのか、よくわからないのですが。というのも ルビュラー は、提供された正規表現が正しいです。
何が足りないのでしょうか?
これを解決するためのアドバイスがあれば、ぜひお願いします
解決方法は?
正規表現が少し寛容すぎるようです。
.+
の中で、cat/subcat/subsubcat を少し制限する必要があります。また、最終的な表現に若干の誤りがあります。
("./*")
であるべきで、これは
("/.*")
:
Working LocationMatchです。
<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>
関連
-
[解決済み] 正規表現におけるスラッシュのエスケープ
-
[解決済み] この正規表現に負の小数点を含めるにはどうしたらよいですか?
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] Powershellで完全一致の文字列のみを置換する
-
[解決済み] Regex - 特定の文字が含まれていません。
-
[解決済み] 2つ以上の連続した文字を検索するためのRegEx
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] Apache 2.2 で mod_rewrite を有効にする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 正規表現におけるスラッシュのエスケープ
-
[解決済み] PostgreSQL での isnumeric()
-
[解決済み] (grep) 非 ASCII 文字にマッチする正規表現ですか?
-
[解決済み] 文字列の最後の文字にマッチする正規表現[重複]について
-
[解決済み] Bashスクリプトで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] 正規表現は、文字列がターゲットで終わる場合にのみマッチします。
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] 正規表現におけるバックスラッシュの後の数値の意味は?
-
[解決済み] この文字にマッチしない」という意味の正規表現演算子はどれ?
-
[解決済み] TCL/EXPECTで$expect_outを使用して変数を割り当てるにはどうすればよいですか?