1

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

例如,网站 A 上的关于我们页面通常如下所示:

website-a.com/about/us

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

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

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

这一点也不罕见,所以我希望我正在查看的问题是一个简单的解决方案:

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

(为简单起见,请假设我正在寻找由网站 A 实施的解决方案,并且代理 B 不受任何可以更改任何内容以使该查找发生在学院方面的人的管理)

我正在考虑在使用 javascript 从谷歌返回结果后重写 URL... 但是查看代码,我预见到会有一些严重的问题。

有没有人设法解决这个问题,或者是否有一个简单的 CSE 技巧来动态重写目标 URL?

4

1 回答 1

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-cturldata-ctorig属性:
CSE 功能的一部分是重写该 url 以通过 google 重定向以进行跟踪, data-cturl是将 href 重写为单击的 URL。不幸的是,您必须完全替换 google 重定向,并且只需让重定向目标指向相同的代理 url,否则 Google 会注意到并发出警告,表明您正在被重定向。用户单击后,CSE 会将 href 写回data-ctorig中设置的值,因此您显然也希望获得该匹配项。

于 2012-07-25T14:28:46.273 回答