使用Varnish重写URL

我有一个相对简单的(我认为)用例,但是我找不到任何有人这样做的例子。 我们在两个不同的应用程序之前使用Varnish作为caching和反向代理,并希望在两者之间做一些更统一的事情,因为它们都做类似的事情。 我希望清可以帮助重写url如下所示。

分页的原始应用url(获得前10项):

//myapplication.com/products/?startindex=1&endindex=10所需url:

//myapplication.com/products/?paginate=1:10这只是一个例子(最复杂的是它结合了两个参数),但是在所有情况下,参数的input值保持不变,只是参数名字会改变。

另一个例子是:

//myapplication.com/search/?query=something到:

//myapplication.com/search/?q=something有没有人有使用清漆的经验,以及如何做到这一点?

谢谢

如果要在内部重写URL,请将以下(未经testing)置于vcl_recv中:

set req.url = regsub( req.url, "^/products/.*([&?]startindex=([0-9]+)|[&?]endindex=([0-9]+))*", "/products/?paginate=\2:\3" ); 

如果你想从一个URL风格的301请求到另一个,那么这有点复杂,但是你可以这么做一个粗略的开始:

vcl_recv:

 set req.http.X-Redirect-URL = regsub( req.url, "^/products/.*([&?]startindex=([0-9]+)|[&?]endindex=([0-9]+))*", "/products/?paginate=\2:\3" ); error 700 req.http.X-Redirect-URL; 

vcl_error:

 if (obj.status == 700) { set obj.http.Location = obj.response; set obj.status = 301; set obj.response = "Moved Permanently"; } 

显然,如果你有其他参数,你将不得不跳过几圈,以确保它们正确传递。