Php 如何对机器人/蜘蛛隐藏页面url?

Php 如何对机器人/蜘蛛隐藏页面url?,php,Php,在我的网站上,我有1000种产品,它们都有自己的网页,可以通过product.php?id=product_id这样的东西访问 在所有这些页面上,我都有一个链接,它有一个urlaction.php?id=PRODUCT\u id&referer=current\u PAGE\u url。。因此,如果我访问product.php?id=100,这个url就会变成action.php?prod_id=100&referer=/product.php?id=1000点击这个url,用户就会返回refe

在我的网站上,我有1000种产品,它们都有自己的网页,可以通过product.php?id=product_id这样的东西访问

在所有这些页面上,我都有一个链接,它有一个url
action.php?id=PRODUCT\u id&referer=current\u PAGE\u url
。。因此,如果我访问product.php?id=100,这个url就会变成
action.php?prod_id=100&referer=/product.php?id=1000
点击这个url,用户就会返回
referer

现在,我面临的问题是,我不断受到蜘蛛的错误攻击。有什么方法可以避免这些错误的点击吗?我知道我可以在robots.txt中“拨号”这个url,但仍然有一些机器人忽略了这个。你推荐什么?
欢迎提出任何意见。谢谢

您可以使用robots.txt文件来阻止符合要求的机器人

配置robots.txt后,接下来可以做的事情是检查服务器日志。找到任何可疑的用户代理


假设你发现邪恶的webspider作为一个用户代理无处不在,你可以在请求的标题中检查它(对不起,没有例子,很久没有使用过php)并拒绝访问webspider。

我不相信你能阻止不服从你建议的用户代理

在走这条路之前,我真的想确定机器人/蜘蛛是一个问题——做任何阻止网站自然导航的事情都应该被视为最后的手段

<>如果你真的想停止蜘蛛,你可能想考虑的是在你的链接中使用JavaScript,这样导航只会在链接被点击之后发生。这应该可以阻止蜘蛛


就我个人而言,我并不担心蜘蛛或机器人。目前,让99%的机器人(即使是那些选择忽略robots.txt的机器人)无法访问链接的最简单方法是使用Javascript。添加一些不引人注目的jQuery:

<script type="text/javascript">
$(document).ready(function() {
    $('a[data-href]').attr('href', $(this).attr('data-href'));
  });
});
</script>

$(文档).ready(函数(){
$('a[data href]').attr('href',$(this.attr('data-href'));
});
});
用户可以按照以下方式构建链接

<a href="" rel="nofollow" data-href="action.php?id=PRODUCT_ID&referrer=REFERRER">Click me!</a>


因为href属性只有在DOM准备就绪后才写入,所以robots找不到任何后续内容。

您的问题包括两个独立的问题:

  • 多个URL指向同一资源
  • 爬虫不尊重robots.txt
  • 第二个问题很难解决

    第一个比较容易。 您似乎需要一个选项让用户返回上一页

    我不知道你为什么不让浏览器的历史记录处理这个问题(通过使用后退按钮和javascript的
    history.back();
    ),但是有足够的理由

    为什么不使用refferer标题?
    几乎所有常见的浏览器都会在每次请求时发送有关引用页面的信息。它可以被欺骗,但对于来访者的市长来说,这应该是一个有效的解决方案

    为什么不使用cookie?

    如果您将当前页面URL存储在cookie中,您仍然可以为每个页面使用一个唯一的URL,并且仍然可以基于cookie中的refferer集动态创建面包屑和反向链接,而不依赖于HTTP referer值。

    另一个选项是使用PHP检测访问您页面的机器人

    您可以使用此PHP函数来检测bot(这将获取大部分bot):

    然后,仅当您发现该用户不是机器人时,echo href才链接到页面:

    if (bot_detected()===false)) {
    echo "http://example.com/yourpage";
    }
    

    您提到的“错误点击”是什么?实际上,当访问actions.php时,它会向数据库中添加一个不属于任何用户的条目(根据应用程序的某些逻辑)。。如果是人类用户,则为真;如果不是,则为假。忽略robots.txt的机器人是混蛋。此解决方案需要javascript才能使网站正常工作,引入无效标记,并将严重损害您的SEO。(谷歌也需要这些URL)@Dae。。我想这是我唯一的选择@我明白了。。但是由于我已经在robots.txt中禁止actions.php,我不认为这会损害SEO等。虽然我同意无效标记的问题,但我认为我可以侥幸逃脱@是杰科。我不知道为什么你认为这会损害搜索引擎优化,从谷歌肯定不需要这些网址的问题。网站工作不需要Javascript,但此链接工作需要Javascript。搜索引擎使用
    href=“/somewhere.html”
    在互联网上建立排名并发现新页面。在您的示例中,
    href=”“
    为空,因此缺少指向所有不同产品页面的所有重要链接。它将阻止(大多数)机器人——包括谷歌——跟踪隐藏的URL。每个页面/产品应具有唯一的URL;对于一个糟糕的设计决策,建议的解决方案是错误的。我的合理假设是,到product.php的链接处理显示内容,而到action.php的链接处理内容。通常的做法是限制后一种类型的爬虫访问页面。也就是说,在每个未经验证的页面视图上创建数据库行的任何页面都是一种等待发生的拒绝服务——在$\u COOKIE中跟踪这种无关紧要的信息是一个更好的主意。实际上,actions.php将用户的兴趣存储在产品中。因此,如果我不是登录用户,我可以对某些产品感兴趣,稍后如果我登录或注册,这些兴趣会添加到我的用户配置文件中,以便执行某些操作。如果只有人访问这个页面,并且在显示出兴趣后不登录,我就不会得到大的数据库表。。但是由于爬行器每天都在访问,而且访问了很多次,我一直在获取大型数据库表,这是我想要避免的。@Kay,看起来您应该使用cookie选项。大概一周后清空桌子。饼干的主意不错。是的,我刚刚设置了一个cron作业来清空表。。就在上周,有超过50000个蜘蛛条目!!!
    if (bot_detected()===false)) {
    echo "http://example.com/yourpage";
    }