有没有办法在清漆上拆分网址或用它更改网址结构。
我知道regsuball
或http://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+)","");
我可以用
删除文章IDset req.http.xrul=regsub(req.http.xrul,"(\d+)","\1"); or any other method
但不能仅获得文章ID
regsub
varnish支持用“ - ”模式拆分网址,因此我可以重新设计网址吗?或者我们只能获得带有perspective-origin
的文章ID吗?
答案 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);
}
希望这有帮助。