清漆拆分网址和更改网址

时间:2016-08-01 10:43:57

标签: regex url-redirection varnish regsub

有没有办法在清漆上拆分网址或用它更改网址结构。

我知道regsuballhttp://aaa.test.com/sport/99244-article-hyun-jun-suku-kapa.html? 支持,但在我的情况下,这些还不够。

我想更改网址并将其重定向到其他网域。

例如:

http://m.test.com/article-hyun-jun-suku-kapa-sport-99244/

重定向到地址

set req.http.xrul=regsuball(req.url,".html","");  "clear .html"

set req.http.xrul=regsub(req.http.xrul,"(\d+)","\1"); find numbers --article ID =99244

我在vcl文件中添加了一些行来执行该操作

set req.http.xrul=regsub(req.http.xrul,"(\d+)",""); 

我可以用

删除文章ID
set req.http.xrul=regsub(req.http.xrul,"(\d+)","\1"); or any other method 

但不能仅获得文章ID

regsub

varnish支持用“ - ”模式拆分网址,因此我可以重新设计网址吗?或者我们只能获得带有perspective-origin的文章ID吗?

1 个答案:

答案 0 :(得分:0)

这是你想要达到的目标吗?

set req.http.X-Redirect-URL = regsuball(req.url,"^/([^/]*)/([0-9]+)-([^/]+)\.html$","http://m.test.com/\3-\1-\2");

这是根据您提供的示例量身定制的工作代码,只是一个级别的部分放置。

如果你想支持更多级别的部分,你只需要调整一点regexp并将/替换为 - 第二步:

set req.http.X-Redirect-URL = "http://m.test.com/" + regsuball(regsuball(req.url, "^/(.*)/([0-9]+)-([^/]+)\.html$", "\3-\1-\2"), "/", "-");

也许你还需要一个改进。如果URL与您的模式不匹配怎么办? X-Redirect-URL与req.url的值完全相同。你绝对不想要重定向循环,所以我建议在X-Redirect-URL的开头添加标记字符然后测试它。

让我们说:

set req.http.X-Redirect-URL = regsuball(regsuball(req.url, "^/(.*)/([0-9]+)-([^/]+)\.html$", "#\3-\1-\2"), "/", "-");
if(req.http.X-Redirect-URL ~ "^#") {
    set req.http.X-Redirect-URL = regsuball(req.http.X-Redirect-URL, "#", "http://m.test.com/");
    return(synth(391));
} else {
    unset req.http.X-Redirect-URL;
}

并且对于所有情况,您需要vcl_synth:

if (resp.status == 391) {
        set resp.status = 301;
        set resp.http.Location = req.http.X-Redirect-URL;
        return (deliver);
}

希望这有帮助。