[英]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.