mod_rewrite rule:如何阻止对包含特定单词的URL的直接访问?

时间:2017-06-13 16:06:21

标签: apache .htaccess mod-rewrite

我需要使用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文件执行此操作?我有很多像这样的网址,我需要阻止搜索引擎导致那些格式化的页面以及机器人 - 它实际上是在杀死我的服务器。

2 个答案:

答案 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忽略这些显示参数。