PHP 检测机器人,屏蔽内页
PHP 检测机器人,屏蔽内页
<?php
// SpiderHelper::rewrite301();
// SpiderHelper::showRobotTxt();
class SpiderHelper { /**
* 如果是爬虫,301跳转到某个地址
* @param string $location
*/
public static function rewrite301($location = '/') {
if(self::isSpider()){
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$location);
exit();
}
} /**
* 显示文件内容
* @var unknown
*/
public static function showRobotTxt() {
if(self::isSpider()){
echo "User-agent: *\r\n".
"Disallow: /";
exit();
}
} /**
* 检查是否是爬虫
* @param string $userAgent 客户端类型
* @return boolean
*/
public static function isSpider($userAgent = '') {
static $kwSpiders = array('bot', 'crawl', 'spider' ,'slurp', 'sohu-search', 'lycos', 'robozilla');
static $kwBrowsers = array('msie', 'netscape', 'opera', 'konqueror', 'mozilla'); $userAgent = strtolower(empty($userAgent) ? $_SERVER['HTTP_USER_AGENT'] : $userAgent);
if(strpos($userAgent, 'http://') === false && self::checkStrpos($userAgent, $kwBrowsers)){ // 浏览器
return false;
}
if(self::checkStrpos($userAgent, $kwSpiders)){ // 蜘蛛
return true;
}
return false;
} /**
* 是否存在数组中的关键字
* @param unknown $needle 字符串
* @param unknown $haystack 关键字数组
* @param string $returnValue 是否返回匹配到的值
* @return boolean|Ambigous <boolean, unknown>
*/
private static function checkStrpos($needle, $haystack, $returnValue = false) {
if(empty($needle)){
return false;
}
foreach((array)$haystack as $v) {
if(strpos($needle, $v) !== false) {
$return = $returnValue ? $v : true;
return $return;
}
}
return false;
}
}
PHP 检测机器人,屏蔽内页的更多相关文章
- Apache服务器网站访问伪静态内页出现No input file specified.的完美解决方案
原文地址:Apache服务器网站访问伪静态内页出现No input file specified.的完美解决方案 启用REWRITE的伪静态功能的时候,首页可以访问,而访问内页的时候,就提示:&quo ...
- nginx的内页跳转总结
刚进公司的时候老大一直在要求php做内页跳转,当时也不太了解细节所以一直没有说话.后来php问我你会不会做内页跳转,我说会一点就做了几个,从此搞内页跳转搞了两个星期.至于为什么做内页跳转哪就暂时不 ...
- SEO之网站关键词的优化 :首页,内页关键字,长尾关键字
这篇文章主要讲的是SEO之网站关键词的优化 :首页,内页关键字,长尾关键字. 为了查找方便,小A汇总了所有SEO优化的相关教程,方便大家查找到自己想要的SEO优化技巧: SEO优化教程汇总. 网站关键 ...
- h5微信支付在微信内页使用微信公众号支付
由于app的迭代,原本的微信支付是使用原生写的 然后h5这边做交互,现在需要修改使用h5的微信支付,于是就有了现在的这个例子,微信支付其实对于我们前端来说就是调用接口然后,根据链接进行支付,其中有点坑 ...
- IIS7.5全站301跳转,内页+带参数url,这才是真正的全站跳转
说好的转型安全领域,可是我还是忍不住要给大家分享这个教程.因为这个问题很常见,大部分人都遇到了(可能你没注意),困扰了我很久,相信这是一篇真正适合你的IIS301跳转教程. 背景 说到301跳转,作为 ...
- <dedecms>织梦内页调用会员信息
1.织梦CMS v5.7调用文章所属会员信息标签 打开官方默认模板article_artcile.htm,我们可以提取出如下代码: {dede:memberinfos} 会员头像:<a h ...
- dedecms文章内页获取缩略图的调用标签
点评:文章内容页缩略图的调用,图片集内容页缩略图的调用很容易混淆,内页想调用缩略图用[filed:picname/]来实现是错误的 文章内容页缩略图的调用,图片集内容页缩略图的调用,相信大家都想找这个 ...
- 织梦dedecms内页分类频道友情链接实现方法
本文介绍了织梦dedecms中内页分类频道加友情链接的三种方法,有需要的朋友参考下. 织梦dedecms中内页分类频道加友情链接,方法有三种: 先讲方法,后讲原理: 方法:先找到首页模版index.h ...
- 在iframe内页触发顶层页面body的blur事件
//在iframe内页触发顶层页面body的blur事件. if (window != top) { $(document.body).click(function () { $(top.docume ...
随机推荐
- Module-Zero之版本管理
返回<Module Zero学习目录> 概要介绍 版本实体 版本管理者 概要介绍 绝大多数的SaaS(多租户)应用都有多个具有不同特征的版本(包).因此,他们可以给租户(即客户)提供不同的 ...
- ElasticSearch ik分词安装
1.下载对应版本的ES ik分词 https://github.com/medcl/elasticsearch-analysis-ik/releases 2.解压elasticsearch-analy ...
- salesforce 零基础学习(四十四)实现checkbox列表简单过滤功能
现在做的项目代码是原来其他公司做的,要在原来基础上业务进行适当调整加上一些CR,其中有一个需要调整的需求如下: 原来使用apex:selectCheckboxes封装了一个checkbox列表,因为数 ...
- 让IE系列支持HTML5的html5shiv.js和respond.min.js
HTML5越来越成为主流,被广大搜索引擎所使用,但IE对HTML5的支持却常被人唾弃. 解决方案有两种: 1.为网站创建多套模板,通过程序对User-Agent的判断给不同的浏览器用户显示不同的页面, ...
- TSQL Merge On子句和When not matched 语义理解
Merge 的On子句指定Match condition,When子句指定过滤条件,如果Source Table和Targe Table匹配的上,很好理解:如果匹配不上,必须深入理解不匹配的条件,否则 ...
- JavaScript 开发技巧 || 返回有效值
<script type="text/javascript">var objOne = undefined || "" || null || 1 | ...
- 深入学习jQuery的三种常见动画效果
× 目录 [1]显隐效果 [2]高度变化 [3]淡入淡出 前面的话 动画效果是jQuery吸引人的地方.通过jQuery的动画方法,能够轻松地为网页添加视觉效果,给用户一种全新的体验.jQuery动画 ...
- 【开源】OSharp3.0框架解说系列:新版本说明及新功能规划预览
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- Javascript之一切皆为对象1
在javascript的世界里,有这么一句话,一切皆为对象. 但是这个对象,应该怎么理解呢? OMG,难道值类型也是对象?!! 当然,不是. 准确地讲是对于“引用类型”而言. 那,在JavaScrip ...
- How to make a not-so-boring speech?
For almost 26 years, even a trivial boy like me, have made over 100 and listened uncountable speeche ...