我试图重定向所有类型的请求:
static.domain.com/site1/resource.jpg
static.domain.com/site1/resource2.js
static.domain.com/site2/resource3.gif
static.domain.com/site2/someDir/resource4.txt
到
site1.domain.com/resource.jpg
site1.domain.com/resource2.js
site2.domain.com/resource3.gif
site2.domain.com/someDir/resource4.txt
基本上,如果主机是static.domain.com:
我很确定regexp可以解决这个问题,只是不确定如何基于另一个修改一个标头..
答案 0 :(得分:0)
我不确定HAProxy是如何工作的,但我可以帮助你使用正则表达式。
尝试:^static\.([^/]+)/([^/]+)/(.*)$
您的新网址为\2.\1/\3
。
请注意,您可能需要转义正则表达式中的/
(这将使其成为\/
)。
答案 1 :(得分:0)
起初我认为这可行:
# Style using set-var, set-path etc
#---------------
#http-request set-var(req.first_path_part) path,field(2,/) if host_static
#http-request set-var(req.last_host_part) hdr(host),regsub(^static\.,) if host_static
#http-request replace-header Host .* %[var(req.first_path_part)].%[var(req.last_host_part)] if host_static
#http-request set-path %[path,regsub(^/.*?/,/)] if host_static
#---------------
但它没有按预期工作。正则表达式在受控测试中正常工作,但在haproxy本身则不然。可能是指令处理和执行顺序的问题。 (也许修改请求路径会破坏第一个正则表达式?)
然后我尝试了这个:
# New style, using set-var and redirection.
#---------------
http-request set-var(req.first_path_part) path,field(2,/) if host_static
http-request set-var(req.last_host_part) hdr(host),regsub(^static\.,) if host_static
http-request redirect location https://%[var(req.first_path_part)].%[var(req.last_host_part)]%[path,regsub(^/.*?/,/)] code 302 if host_static
#---------------
再一次,它几乎可以工作,但由于某种原因,主机没有得到适当的替换。
由于这只是由QA环境使用,并且行为与生产无关(静态。*,在我的情况下,将指向CDN),我认为现在这是一个充分的解决方案:
<div id="toolbar" class="btn-group">
<button class="btn btn-primary">
Actions
</button>
<button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-right">
<li>
<a href="#">Anuler</a>
</li>
<li>
<a href="#">Sauvegarder</a>
</li>
<li class="dropdown dropdown-submenu"><a class="dropdown-toggle" href="#" data-toggle="dropdown">Payez</a>
<ul class="dropdown-menu">
<li><a href="#">Comptant</a></li>
<li><a href="#">Débit</a></li>
<li><a href="#">Chèque</a></li>
</ul>
</li>
</ul>
</div>