重定向,但仅限于特定的 Web 浏览器

重定向,但仅限于特定的 Web 浏览器

我发现了一些廉价的 SEO 页面,其唯一目的是通过馈送链接推广其他网站。在 Chrome、Safari 和 Firefox 上,它们显示 SEO 网页,但在我的 Android 手机上的 Kiwi Web Browser 上,页面被重定向到“恭喜!您可能是我们的下一位幸运赢家!”。这是怎么发生的?为什么它只在一个 Web 浏览器上重定向?

我有兴趣过滤掉这些网站,如果我可以人为地暴露重定向,那将会很有帮助,因为 SEO 页面没有任何可识别的特征。

更新:我注意到重定向仅在点击我通过电子邮件发送给自己的垃圾邮件链接时发生,并且仅在我手机上的 gmail 应用程序上发生。所以我在请求()标头中添加了“referer”:“com.google.android.gm”。我不知道这是否能解决问题,但不会有什么坏处。

答案1

网络服务器可能会进行某种User-Agent标头检查并基于此进行重定向。

使用 apache,可以使用类似下面的方法有条件地将特定客户端重定向到不同的位置:

RewriteEngine On
RewriteCond %{HTTP_HOST} example.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} Firefox [OR]
RewriteCond %{HTTP_USER_AGENT} Mozilla
RewriteRule ^(.*)$ http://other.com/$1 [L,R=301]

或者,提供页面服务的应用程序可以根据用户代理返回不同的内容,而无需重定向。例如使用 PHP:

https://www.php.net/manual/en/function.get-browser.php

$u_agent = $_SERVER['HTTP_USER_AGENT'];

if (preg_match('/Firefox/i', $u_agent)) {
    $output = 'some list of SEO urls';
}
elseif (preg_match('/Android/i', $u_agent)) {
    $output = '"Congratulations! You may be our next lucky winner!"';
}

要调查某些 URL 是否根据用户代理返回不同的结果,您可以欺骗您发送的用户代理字符串curl或支持设置请求标头的某些 http 客户端库。

例如假装是“firefox”...

curl -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" \
    https://example.com/some_web_page.html 

答案2

最终奏效的是使用 seleniumwire 和 driver.header_overrides = {'Referer': 'com.google.android.gm'} 显然,它是点击了我的 gmail 应用程序中的链接,而不是使用 Kiwi。我使用相同的 referer 在 Chrome 上重现了重定向。

相关内容