我有一个相对简单的(我认为)用例,但是我找不到任何有人这样做的例子。 我们在两个不同的应用程序之前使用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"; }
显然,如果你有其他参数,你将不得不跳过几圈,以确保它们正确传递。