大学B订阅了网站A,他们通过内部代理访问这些网站,这会改变所有网页的网址,以便通过代理重定向。
例如,网站A上的关于我们的页面通常如下所示:
website-a.com/about/us
如果您通过大学B的代理连接查看该页面,该链接将是:
website-a.proxy-b.com/about/us
重写是在代理上完成的,网站A无法控制它。
这一点都不常见,所以我希望我看到的问题很容易解决:
网站A使用Google自定义搜索引擎...搜索在代理完成其URL重写后运行,动态搜索结果将返回UNALTERED URL ...因此,如果代理用户跟随一个,则会返回直接访问我们的网站,并失去他们在代理服务器下的访问权限。
(请假设,为了简单起见,我正在寻找一个由网站A实施的解决方案,并且代理B不是由任何可以改变任何东西的人管理,以便在学院方面进行此查找)< / p>
我正在考虑在使用javascript从谷歌返回结果后重写URLS ...但是看一下代码,我预见到了一些严重的问题。
有没有人设法解决这个问题,还是有一个简单的CSE技巧来动态重写目标网址?
答案 0 :(得分:1)
找到解决方案:
function fixProxyLinks(){
proxy_rex = new RegExp( document.location.host, "gi");
orig_rex = new RegExp( "/www.mysite.com/", "gi");
//Check if current server is DIFFERENT from bg.com
if( document.location.host.search( orig_rex ) == -1 ){
$('.gsc-results a').each( function(){
// Find all the fresh new search results and correct them for the sake of the Proxy
if( this.href.search( proxy_rex ) == -1 && this.href.search( bg_rex ) >= 0 ){
this.href = this.href.replace( orig_rex, '/'+document.location.host+'/' );
$(this).attr("data-cturl", this.href);
$(this).attr("data-ctorig", this.href);
}
});
}
}
然后你把它放在你正在构建你的CSE对象的地方:
customSearchControl.setSearchCompleteCallback(this, fixProxyLinks);
注意:关于 data-cturl 和 data-ctorig 属性:
CSE功能的一部分是REWRITE,URL通过谷歌重定向进行跟踪, data-cturl 是在点击时重写href的URL。不幸的是,您必须完全替换Google重定向,并且只需将重定向目标设为相同的代理网址,否则Google会注意到并发出警告您正在重定向。
用户点击后,CSE会将href写回 data-ctorig 中设置的值,因此您显然也希望获得该匹配。