繁体   English   中英

Apache LocationMatch Regex

[英]Apache LocationMatch Regex

我的问题

我需要向Tomcat提供Apache HTTP Server(v2.4.10)代理请求以获取动态应用程序,这些应用程序不仅与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> proxy to: http://mycluster/search/<anything-not-ending-in-html>

我的尝试

我正在尝试使用LocationMatch正则表达式来处理这个问题,但我没有完全成功。 以下LocationMatch正则表达式可以自行运行(将*.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>

尝试访问404页面中的/products/aaa/bbb/ccc/结果。 在这里,我期待任何不以.html结尾的“/ products / aaa / bbb / ccc /”请求传递给/ search /(包括要包含的任何后续路径信息:例如... / search /相比 )

我的问题

我无法弄清楚出了什么问题。 根据Rubular提供的正则表达式是正确的:

我在这里错过了什么?

我很感激任何解决这个问题的建议!

似乎正则表达式有点过于宽松 - 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM