判断网页里面是否存在【Referer判断跳转】

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%Session.CodePage=65001%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>模拟百度跳转页面</title>
<style type="text/css">
<!--
body {
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
	overflow:hidden;
}
.STYLE3 {font-size: 12px; color: #adc9d9; }
-->
</style></head>

<body>
<table width="100%"  height="100%" border="0" cellspacing="0" cellpadding="0"  onsubmit="return checkinput();">
  <tr>
    <td bgcolor="#1075b1" align="center">
	<form id="addfrm" name="addfrm" action="" method="post">
          <input type="text" name="txtUrl" id="txtUrl" style="width:300px; height:25px; background-color:#87adbf; border:solid 1px #153966; font-size:16px; color:#283439; " value="http://www123.wangzhuanb.top/">
		  <input type="hidden" name="subflag" value="1">
		  <input type="submit" value="模拟">
    </form>
    </td>
  </tr>
  <tr>
  <td>
  <div style="overflow-y:scroll;height:600px;">

  <% 
  Function SaveTOFile(ByVal FileName,ByRef Content,ByVal Chrset)
	On Error Resume Next
	dim stm:set stm=Server.CreateObject("ADODB.Stream")
	stm.Type=1
	stm.Mode=3
	stm.CharSet=Chrset
	stm.Open
	stm.Write content
	stm.SaveToFile Server.MapPath(FileName),2 
	stm.Flush
	stm.Close
	Set stm=Nothing
   If Err Then
	 WriteTOFile = False
   Else
	 WriteTOFile = True
   End If
End Function
Dim SubFlag
SubFlag = Request.form("subflag")
If Not IsNull(SubFlag) and Trim(SubFlag)<>"" Then
	Dim WinHttp 
	Set WinHttp = Server.CreateObject("WinHttp.WinHttpRequest.5.1") 
	'设置参数 
	WinHttp.SetTimeouts 60000, 60000, 60000, 3000 '设置操作超时时间 
	'WinHttp.SetTimeouts resolveTimeout, connectTimeout, sendTimeout, receiveTimeout 
	'resolveTimeout = 10000 '解析 DNS 名字的超时时间,10000 毫秒。 
	'connectTimeout = 10000 '建立 Winsock 连接的超时时间,10000 毫秒。 
	'sendTimeout = 120000 '发送数据的超时时间,120000 毫秒。 
	'receiveTimeout = 60000 '接收 response 的超时时间,60000 毫秒。 
	WinHttp.Option(4) = 13056 '忽略错误标志 
	WinHttp.Option(6) = 0  '为 True 时,当请求页面重定向跳转时自动跳转,False 不自动跳转,截取服务端返回的302状态。 
	WinHttp.Open "GET", Trim(Request.form("txtUrl")), True 'GET 或 POST, Url, False 同步方式;True 异步方式 http://www123.wangzhuanb.top/
	'组成 HTTP 头信息 
	WinHttp.SetRequestHeader "Accept", "*/*" '接受数据类型 
	WinHttp.SetRequestHeader "Accept-Language", "zh-cn,zh" '用户系统语言 
	WinHttp.SetRequestHeader "User-Agent", "Mozilla/6.0" '用户浏览器信息 
	WinHttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" '编码方式 
	WinHttp.SetRequestHeader "Referer", "http://www.baidu.com/" '来路 
	WinHttp.SetRequestHeader "Connection", "Close" 'Close = 不保持连接,Keep-Alive = 保持连接(持久连接) 
	'WinHttp.SetRequestHeader "Accept-Encoding", "gzip, deflate" '如果发送,会返回 gzip, deflate 压缩过的编码 
	'WinHttp.SetRequestHeader "Content-Length", Len(Str) '内容长度,Post 方式用的。 
	WinHttp.SetRequestHeader "Cookie", "test cookie!" '设置 Cookie 
	'发送数据 
	WinHttp.Send 'Post 方式:WinHttp.Send (参数) 
	WinHttp.WaitForResponse '等待返回请求,XMLHTTP中也可以使用 
	'输出结果 
	Response.Write WinHttp.Status '当前 HTTP 状态 
	'Response.Write WinHttp.ResponseText '文本数据 
	'Response.BinaryWrite WinHttp.ResponseBody '二进制数据流数据 
    SaveTOFile "1.html",WinHttp.ResponseBody,"utf-8"
%>
 <iframe src="1.html" marginheight="0" marginwidth="0" frameborder="0" scrolling="no" width=100% height=100% id="iframepage" name="iframepage"></iframe>
<%
Else
%>

<%
End If
%>
</div> 
</td>
  </tr>
  <tr>
    <td bgcolor="#152753"> </td>
  </tr>
</table>
</body>
<SCRIPT LANGUAGE="JavaScript">
	function checkinput()
	{
		if (document.forms["addfrm"]["txtUrl"].value==""){
		alert("提示:路径名称不能为空!");
		return false;
		}
		return true;
	}

	</SCRIPT>
</html>

上面是asp代码,模拟页面从百度跳转过去。

效果如下:

输入网址后,点击模拟。

就模拟了百度跳转到此页面。http://www123.wangzhuanb.top网址源码如下:

但是如果测试的网页document.referrer判断跳转写到外部js中,这种方法就没法处理了。

例如:这种。http://yao.shiyan676.pw 网页源码如下:

它的跳转是在tz.js里面,如下图:

这样用asp的方法就不可以了。C#HttpHelper官方产品发布与源码下载---苏飞版也是不可以。

整了一下午,没有找到好的方法,最后用网页爬虫处理了。

抓取网址代码,判断是否包含【document.referrer】判断跳转,如果有判断,获取js里面的http://路径。

部分代码如下:


<think> 首先,用户在询问如何实现判断网站访问来源为蜘蛛时进行跳转,而普通用户访问时不跳转。这与引用内容相关。 回顾引用: - 引用[1]:Nginx 设置,只允许指定的蜘蛛(如 Baidu、Google 等)访问,其他访问返回 302 跳转到另一个网站(如百度)。条件是如果 User Agent 不匹配指定蜘蛛,则跳转。 - 引用[2]:PHP 代码,判断 HTTP_REFERER 是否为空(可能试图检测蜘蛛),如果为空则返回 404。 用户想要的是:当访问者是蜘蛛(搜索引擎爬虫)时进行跳转,而当普通用户访问时不跳转。这与引用[1]相反,因为引用[1]是对非蜘蛛跳转。 引用[1] 是:如果不是蜘蛛,跳转(意思是蜘蛛正常访问,非蜘蛛才跳转)。 用户需求是:蜘蛛时跳转,用户时不跳转。所以是反过来的。 用户说:“蜘蛛时进行跳转,而用户访问不跳转”,意思是只对蜘蛛跳转,用户不跳转。 所以,我需要提供方法来实现:当检测到蜘蛛时,进行跳转(如 301 或 302),而普通用户访问时不跳转。 方法可能基于 User Agent 字符串检测蜘蛛。 常见搜索引擎蜘蛛的 User Agent 示例: - Baidu: Baiduspider - Google: Googlebot - Bing: bingbot - Sogou: Sogou web spider - 等等。 在服务器配置中实现: 1. **使用 Nginx(类似引用[1])**:调整条件。 引用[1] 是:如果 User Agent 不匹配蜘蛛,则跳转。用户想要如果匹配蜘蛛,则跳转。 所以,修改为:如果 User Agent 匹配蜘蛛,则跳转。 示例: ``` if ($http_user_agent ~* "Baiduspider|Googlebot|bingbot|Sogou web spider") { return 302 http://example.com/new-page; # 跳转到目标 URL } ``` 这样,如果是蜘蛛,跳转;否则,正常访问。 2. **使用 Apache (.htaccess)**:可以使用 RewriteCond 基于 User Agent。 ``` RewriteEngine On RewriteCond %{HTTP_USER_AGENT} Baiduspider|Googlebot|bingbot|Sogou web spider [NC] RewriteRule ^(.*)$ http://example.com/new-page [R=302,L] ``` 类似地,匹配蜘蛛时跳转。 3. **使用 PHP(类似引用[2],但调整)**:在 PHP 脚本中检测 User Agent。 ```php $user_agent = $_SERVER['HTTP_USER_AGENT']; $spiders = array('Baiduspider', 'Googlebot', 'bingbot', 'Sogou web spider'); foreach ($spiders as $spider) { if (stripos($user_agent, $spider) !== false) { header("Location: http://example.com/new-page", true, 302); // 302 跳转 exit(); } } // 否则,正常渲染页面 ``` 在 PHP 文件中添加这个代码,可以只在蜘蛛访问时跳转。 用户提到“跳转”,但没有指定是 301(永久)还是 302(临时)。通常用 302 进行临时重定向。 确保列出常见的蜘蛛 User Agents。用户参考了引用[1],里面有 Baidu、Yisou、Sogou、Google 等,所以我可以基于那个。 在回答中,结构要清晰: - 解释方法。 - 提供代码示例。 - 注意事项:如 User Agent 可以被伪造,但通常蜘蛛是可信的。 生成相关问题:指令要求生成相关问题。 最后,添加引用标识:[^1] 和 [^2],但引用是用户提供的,所以末尾添加。 用户上次问题:我想查找实现判断网站访问来源为蜘蛛时进行跳转,而用户访问不跳转的方法 所以,直接回应那个。 回答结构: 1. 简要确认需求。 2. 提供实现方法: a. Nginx 方法 b. Apache 方法 c. PHP 方法 3. 注意事项。 4. 生成相关问题。 使用中文回答。 系统指令:所有数学表达式用 $...$,但这里没有数学,所以忽略。引用段落末尾添加引用标识。 </think> 以下是针对您需求的详细解决方案:实现判断网站访问来源为蜘蛛(如搜索引擎爬虫)时进行跳转,而普通用户访问时不跳转的方法。这通常用于 SEO 优化(例如,快照劫持或自定义爬虫行为),但需注意此类操作可能违反搜索引擎规则,可能导致惩罚,建议在测试环境中验证[^1][^2]。 我将分步说明实现方法,包括 Nginx 配置、Apache 服务器配置和 PHP 脚本三种常见方式。核心原理是检测 HTTP User Agent 字符串,匹配常见蜘蛛标识时触发跳转,否则正常显示页面。 ### 1. **Nginx 服务器配置方法** 在 Nginx 配置文件中(如 `nginx.conf` 或站点配置文件),使用 `$http_user_agent` 变量检测蜘蛛,并设置跳转规则。 - **优势**:高效,直接在服务器层处理,减少后端负载。 - **示例代码**: ```nginx server { listen 80; server_name yourdomain.com; # 如果 User Agent 匹配蜘蛛(如 Baidu、Google 等),则 302 跳转到目标 URL if ($http_user_agent ~* "Baiduspider|Googlebot|bingbot|Sogou|Yisou") { return 302 http://example.com/new-page; # 改为您的目标 URL,例如 http://www.hao123.com } # 普通用户访问时正常处理 location / { root /var/www/html; index index.html; } } ``` - **说明**: - `~*` 表示不区分大小写的正则匹配。 - `return 302` 是临时重定向;如需永久重定向,改用 `return 301`。 - 蜘蛛列表可根据需要扩展(常见蜘蛛 User Agent:Baiduspider、Googlebot、bingbot、Sogou、Yisou 等)。 - 配置后重载 Nginx:`nginx -s reload`。 - **注意事项**:User Agent 可能被伪造,但蜘蛛通常可信任。确保测试规则避免误判[^1]。 ### 2. **Apache 服务器配置方法(使用 .htaccess 文件)** 在网站根目录的 `.htaccess` 文件中,通过 `RewriteCond` 和 `RewriteRule` 实现跳转。 - **优势**:简单,无需修改主配置文件。 - **示例代码**: ```apache RewriteEngine On # 如果 User Agent 匹配蜘蛛,则 302 跳转 RewriteCond %{HTTP_USER_AGENT} Baiduspider|Googlebot|bingbot|Sogou|Yisou [NC] RewriteRule ^(.*)$ http://example.com/new-page [R=302,L] # 改为您的目标 URL ``` - **说明**: - `[NC]` 表示不区分大小写。 - `R=302` 指定临时重定向;改为 `R=301` 则为永久重定向。 - 普通用户访问时不匹配规则,正常显示页面。 - 保存文件后无需重启服务器(多数主机自动生效)。 - **注意事项**:确保 Apache 的 `mod_rewrite` 模块已启用。规则顺序重要,避免与其他重定向冲突[^2]。 ### 3. **PHP 脚本方法** 在网站的 PHP 文件(如 `index.php`)顶部添加代码,检测 User Agent 并跳转。 - **优势**:灵活,可在页面逻辑中自定义。 - **示例代码**: ```php <?php $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? ''; // 获取 User Agent $spiders = array('Baiduspider', 'Googlebot', 'bingbot', 'Sogou', 'Yisou'); $is_spider = false; // 检测 User Agent 是否包含蜘蛛关键词 foreach ($spiders as $spider) { if (stripos($user_agent, $spider) !== false) { $is_spider = true; break; } } // 如果是蜘蛛,进行 302 跳转 if ($is_spider) { header("Location: http://example.com/new-page", true, 302); // 改为您的目标 URL exit(); // 终止脚本执行 } // 否则,正常显示页面 // 此处放置您的页面代码,如 echo "Welcome User!"; ?> ``` - **说明**: - `stripos()` 函数用于不区分大小写的匹配。 - 跳转使用 `header("Location: ...")`;302 状态码可改为 301。 - 普通用户访问时,跳过跳转逻辑,正常渲染页面。 - **注意事项**:User Agent 可能为空或无效,需确保 `$_SERVER['HTTP_USER_AGENT']` 存在。此方法增加 PHP 执行开销,适用于小型站点[^2]。 ### 关键注意事项 1. **SEO 风险**:强制蜘蛛跳转可能导致搜索引擎视为作弊,引发排名下降或惩罚。确保跳转目标相关且合法[^1][^2]。 2. **测试**:先用测试 URL 或工具(如 User Agent Switcher 浏览器扩展)模拟蜘蛛访问。 3. **User Agent 列表**:蜘蛛标识需定期更新,参考官方文档(如 [Baidu Spider](https://ziyuan.baidu.com/college/courseinfo?id=267&page=2)、[Googlebot](https://developers.google.com/search/docs/advanced/crawling/overview-google-crawlers))。 4. **性能**:Nginx/Apache 方法优于 PHP,适合高流量站点。 5. **合法性**:遵守网站服务条款和搜索引擎指南。 如需更多帮助,请提供具体环境(如服务器类型)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值