我需要使用mod_rewrite
规则来解决以下问题。
如果我网站的访问者遵循此路径(见下文),那么在访问第一页后,他/她应该能够访问第二个(更加格式化的)网址:
http://www.example.com/page/
http://www.example.com/page/?jump2=24&autoplay=1#anchor
但是如果访问者直接访问格式化的URL,则应该阻止它:
http://www.example.com/page/?jump2=24&autoplay=1#anchor
如何使用.htaccess
文件执行此操作?我有很多像这样的网址,我需要阻止搜索引擎导致那些格式化的页面以及机器人 - 它实际上是在杀死我的服务器。
答案 0 :(得分:1)
您可以使用Cookie来检查用户是否已访问该页面。
如果没有查询字符串,请在索引页面中创建一个cookie。然后在用户请求带有查询字符串的页面时检查它是否已设置。
要阻止搜索引擎中的网址,请使用robots.txt
答案 1 :(得分:1)
HTTP是无状态的,所以这不是一个简单的问题。您将不得不以某种方式基本上捏造它,因此没有简单的插入式解决方案,并且在另一个答案中建议使用cookie是一种合理的方法(会话cookie或其他内容) )。如果您排除了cookie,那么它会大大减少选项。但...
您可以在页面上生成令牌,然后在URL中检查该令牌。令牌可以基于日期,因此它会定期更改,也许只允许今天和昨天的令牌。如果令牌不存在于参数中,则拒绝该请求。您可以使用RewriteMap
从.htaccess
。
另一个值得提及的选择是,可以严格阻止错误的机器人,因为他们忽略了robots.txt
。因此,您可以设置机器人陷阱脚本,从每个页面链接并隐藏在CSS中,然后在访问时立即从该脚本阻止IP(防火墙中的块)。陷阱在robots.txt
中排除。
一旦确定,robots.txt
滥用者立即被禁止,您可以在http://www.example.com/page/?
中添加robots.txt
之类的内容(因为robots.txt指定了禁止使用的网址的开头,不完整的网址)并在您的网页中设置规范网址。其他搜索引擎选项也很有用,您可以阻止您不想要尊重robots.txt
的机器人,并设置Google Search Console忽略这些显示参数。