0

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

我知道regsubregsuball支持这一点,但就我而言,它们还不够。

我想更改一个 url 并将其重定向到另一个域。

例如:

http://aaa.test.com/sport/99244-article-hyun-jun-suku-kapa.html?

重定向到以下地址

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

我在 vcl 文件中添加了一些行来做到这一点

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

我可以用

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

但不能只获得文章 ID

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

varnish 是否支持用“-”模式分割 url,因此我可以重新设计 url?或者我们可以只得到 articleIDregsub吗?

4

1 回答 1

0

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

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

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

如果您想支持更多级别的部分,您只需在第二步中稍微调整一下正则表达式并将 / 替换为 - :

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);
}

希望这可以帮助。

于 2016-08-03T11:21:19.827 回答