谷歌自定义搜索结果通过代理显示错误

Google Custom Search results display wrong through a proxy

本文关键字:代理 显示 错误 自定义 搜索结果 谷歌      更新时间:2024-01-04

学院B订阅了网站a,他们通过内部代理访问该网站,该代理会更改所有页面的URL以适应通过代理的重定向。

例如,网站A上的关于我们的页面通常看起来是这样的:

website-a.com/about/us

如果你通过学院B的代理连接查看页面,链接将是:

website-a.proxy-b.com/about/us

重写是在代理上完成的,网站A无法控制它。

这并不罕见,所以我希望我所看到的问题是一个简单的解决方案:

网站A使用谷歌自定义搜索引擎。。。搜索在代理完成URL重写后运行,并且动态搜索结果将返回未经重写的URL。。。因此,如果代理用户跟随一个,他们会直接返回到我们的网站,并失去在代理下的任何访问权限。

(为了简化起见,请假设我正在寻找一个由网站a实现的解决方案,而代理B不是由任何可以更改任何内容以使该查找在学院一侧发生的人管理的)

我正在考虑在使用javascript从谷歌返回结果后重写URLS。。。但从代码来看,我预见到了一些严重的问题。

有人设法绕过了这一点吗?或者有没有一个简单的CSE技巧可以随时重写目标URL?

找到了一个解决方案:

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

注意:关于数据ctrldata ctorig属性:
CSE功能的一部分是重写要通过谷歌重定向的url以进行跟踪,数据turl是它将在单击时重写href的url。不幸的是,你必须完全替换谷歌重定向,并将重定向目标设置为相同的代理url,否则谷歌会注意到并警告你正在被重定向。用户单击后,CSE会将href写回数据ctorig中设置的值,因此您显然也希望进行匹配。