存档在 2015年2月

怎样将Destoon的资讯内容中的外链经过短网址处理后输出

2015年2月28日

发现在Destoon后台》系统维护》网站设置》服务器优化,开启“图片延时加载”功能。这个功能将自动检测正文中的图片HTML标签<img>,并对参数进行改造。

例如:

<img src="http://www.domain.com/image/lazy.gif" class="lazy" original="http://www.domain.com/image/001.jpg"  title="Title" alt="Title" />

另外一个开关是清除内容链接,将正文中的超链接清除(怀疑是在内容发布时处理,而不是如WordPress插件Autolink URI一样在动态生成网页时将正文中所有不是超链接的网址都转换)。

遵循这个思路,可以将短网址通过接口自动生成功能引入?

$url = "http://www.domain.com/";
$shorturl = file_get_contents("http://sho.rt/api.php?signature=w53h6ef4s3&action=shorturl&format=simple&url=$file_url");

这个方案如果能够实现,依然存在问题:

A. 如果如图片延时加载功能一样,属于临时处理模式。关闭功能后,依然输出原代码。

  • Destoon只有正文这个字段,正文中的外链并不作为字段存储,同时生成相应的短网址也无字段存储,或者替换原外链
  • 如果是动态/伪静态页面模式:初次访问Destoon某资讯页面,所有外链将生成相应的短网址并输出。再次访问,将重新生成短网址一遍。短网址程序无论设定为执行去重检查还是每访问接口即生成新短网址,都将造成服务器资源的压力。
  • 如果是纯静态页面模式,初次访问Destoon某资讯页面,所有外链将生成相应的短网址并输出,同时生成静态页面,那么也就避免了上一条中短网址服务器压力的问题。但同时造成了静态页面占用大量空间这个问题。

B. 如果采用脚本直接对数据库操作,属于永久处理模式。

  • 采用脚本直接对数据库操作:1. 筛选外链;2. 短网址处理;3. 替换原外链为短网址。这样无论是动态/伪静态/纯静态页面模式,都不影响了。

怎样为大数据网站创建sitemap

2015年2月28日

1. 利用所用平台已有的sitemap程序,进行适当修改

参考:http://bbs.destoon.com/forum.php?mod=viewthread&tid=56411

2. 利用客户端软件SitemapX

官网:http://cn.sitemapx.com/

下载:http://www.sitemapx.com/SiteMapX_setup.exe

免费的网站地图制作工具 —— 适用于谷歌、必应、雅虎、百度…网站地图制作工具SiteMap X不仅能帮助您快速制作引导性的、适用于Google、Bing、Yahoo、Baidu等各大搜索引擎的网站地图,更能帮助您分析网站内部链接优化情况、发现网页问题(诸如错链、死链等影响网页SEO排名的因素),而最重要的——Sitemap X是一款永久免费的网站地图制作工具。不需要任何技巧,只要几步简单的设置,就能创建符合各大搜索引擎需要的多种网站地图格式(XML、GZ、TXT、HTML等)。

3. 利用Google Sitemap Generator工具

下载:http://sourceforge.net/projects/goog-sitemapgen/files/sitemapgen/

参考:http://home.donews.com/donews/forum/22/2006-12/29/623417

sitemaps.xml和robots.txt的格式

2015年2月28日

详细了解Sitemaps:

Sitemaps协议使您能够告知搜索引擎您网站中可供抓取的网址。Sitemaps是一个XML文件,列有某个网站所有网址。此协议可高度扩展,因此可适用于各种大小的网站。它还能够使网站管理员提供有关每个网址的其他信息(上次更新的时间、更改的频率、与网站中其他网址 相比它的重要性)以便搜索引擎可以更智能地抓取该网站。

Sitemaps在用户无法通过可浏览界面访问网站的所有区域时作用尤其明显。(通常,指用户无法通过追踪链接访问网站的特定页面或区域。)例如,那些只能通过搜索表单才能访问其中某些页面的网站都会从创建 Sitemaps 并将其提交到搜索引擎中获益。

Sitemaps协议只是补充而不是取代搜索引擎已用来发现网址的基于抓取的机制。通过向搜索引擎提交一个Sitemaps(或多个 Sitemaps),可帮助搜索引擎更好地抓取您的网站。

当然使用此协议并不能保证搜索索引中将包含您的网页。也不会影响 Google 对您网页进行排名的方式。

Sitemaps 0.84 是依据 Attribution-ShareAlike Creative Commons License 的条款提供的。

XML Sitemaps 格式

Sitemaps 协议格式由 XML 标记组成。Sitemaps 的所有数据数值应为实体转义过的。文件本身应为 UTF-8 编码的。

以下是只包含一个网址并使用所有可选标记的 Sitemaps 示例。可选标记为斜体。

<?xml version="1.0" encoding="UTF-8"?>
  <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
     <url>
      <loc>http://www.example.com/</loc>
    <lastmod>2005-01-01</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
     </url>
  </urlset>

Sitemaps 应:

  • <urlset> 开始标记开始,以 </urlset> 结束标记结束。
  • 每个网址包含一个作为父标记的 <url> 条目。
  • 每一个 <url> 父标记包括一个 <loc> 子标记条目。

XML 标记定义

以下对可用 XML 标记进行说明。

<urlset>
必填 封装此文件并提供当前协议标准作为参考。
<url>
必填 每个网址条目有一个父标记。剩余标记为此标记的子标记。
<loc>
必填 该页的网址。如果您的 Web 服务器需要网址的话,此网址应以协议开始(例如:http)并以斜线结尾。此值应少于 2048 个字符。
<lastmod>
可选 该文件上次修改的日期。此日期应采用 W3C Datetime 格式。如果需要的话,此格式允许省略时间部分,而仅使用 YYYY-MM-DD。
<changefreq>
可选 页面可能发生更改的频率。此值为搜索引擎提供一般性信息,可能与搜索引擎抓取页面的频率不完全相关。有效值为:

  • always
  • hourly
  • daily
  • weekly
  • monthly
  • yearly
  • never

值“always”应当用于描述每次访问时都会改变的文档。而值“never”应当用于描述已存档网址。

请注意此标记的值被视为提示而 不是命令。尽管搜索引擎抓取工具在做决定时考虑此信息,但是它们对标记为“hourly”页面的抓取频率可能低于每小时一次,而对标记为“yearly” 页面的抓取频率可能高于每年一次。抓取工具也可能定期抓取标记为“never”的页面,以便它们能够处理对这些页面的意外更改。

<priority>
可选 此网址的优先级与您网站上其他网址的优先级相关。有效值范围从 0.0 到 1.0。此值不会影响您的网页与其他网站上网页的比较结果,只是告诉搜索引擎您认为您的那个网页最重要,从而它们对您页面的抓取可以按照您最喜欢的方式进行排序。一个网页的默认优先级为 0.5。请注意,您为页面指定的优先级不影响您的网址在搜索引擎的结果页的排名。搜索引擎在同一网站的不同网址之间进行选择时使用此信息,因此,您可以使用此标记来增加相对重要的网址在搜索索引中显示的可能性。

而且,请注意为您网站中的所有网址都指定高优先级对您没什么好处。由于优先级是相互关联的,只用于在您自己网站的网页之间进行选择;您网页的优先级不会与其他网站的页面优先级进行比较。

实体转义

我们要求您的 Sitemaps 文件为 UTF-8 编码(通常在保存文件时可以做到)。对于所有的 XML 文件,任何数据数值(包括网址)都应对下表中列出的字符使用实体转义码。

字符 转义码
& 符号 & &amp;
单引号 &apos;
双引号 &quot;
大于 > &gt;
小于 < &lt;

此外,所有的网址(包括您的 Sitemaps 的网址)都应编码,以便它们所在的以及网址转义的 Web 服务器识别。然而,如果您使用任何脚本、工具或日志文件来生成网址(除了手动输入之外的任何方法),通常这部分已经替您完成了。如果您提交了 Sitemaps 却收到 Google 无法找到某些网址的错误消息,请查看并确保您的网址遵循RFC-3986 URI 标准、RFC-3987IRI 标准以及 XML 标准

以下是使用非 ASCII 字符(ü)以及要求实体转义的字符(&)的网址示例:

http://www.example.com/ümlat&q=name

以下是 ISO-8859-1 编码的(用于使用该编码的服务器上的托管)以及网址转义过的同一网址:

http://www.example.com/%FCmlat&q=name

以下是 UTF-8 编码(用于使用该编码的服务器上的托管)且网址转义过的同一网址:

http://www.example.com/%C3%BCmlat&q=name

以下是实体转义过的同一网址:

http://www.example.com/%C3%BCmlat&amp;q=name

XML Sitemaps 示例

下例显示了一个 XML 格式的 Sitemaps。示例中的 Sitemaps 包含少数网址,每一个都用 <loc> XML 标记来识别。此示例中,为每个网址提供了一组不同的可选参数。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
     <url>
        <loc>http://www.example.com/</loc>
        <lastmod>2005-01-01</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.8</priority>
     </url>
     <url>
        <loc>http://www.example.com/catalog?item=12&amp;desc=vacation_hawaii</loc>
        <changefreq>weekly</changefreq>
     </url>
     <url>
        <loc>http://www.example.com/catalog?item=73&amp;desc=vacation_new_zealand</loc>
        <lastmod>2004-12-23</lastmod>
        <changefreq>weekly</changefreq>
     </url>
     <url>
        <loc>http://www.example.com/catalog?item=74&amp;desc=vacation_newfoundland</loc>
        <lastmod>2004-12-23T18:00:15+00:00</lastmod>
        <priority>0.3</priority>
     </url>
     <url>
        <loc>http://www.example.com/catalog?item=83&amp;desc=vacation_usa</loc>
        <lastmod>2004-11-23</lastmod>
     </url>
</urlset>

您可以使用 gzip 压缩您的 Sitemaps 文件。压缩 Sitemaps 文件会降低对带宽的要求。请注意,未压缩的 Sitemaps 文件不得大于 10MB。

使用 Sitemaps 索引文件(对多个 Sitemaps 文件进行分组) [内容]

您可以提供多个 Sitemaps 文件,但提供的每个 Sitemaps 文件包括的网址不得超过 50,000 个,并且未压缩时不能大于 10MB (10,485,760)。这些限制条件有助于确保 Web 服务器不会因传输非常大的文件而遇到麻烦。

如果要列出超过 50,000 个网址,您需要创建多个 Sitemaps 文件。如果预计您的 Sitemaps 网址数量会超过 50,000 个或大小超过 10MB,应考虑创建多个 Sitemaps 文件。如果您的确提供了多个 Sitemaps,您可以将其列在 Sitemaps 索引文件中。Sitemaps 索引文件只能列出不超过 1,000 个 Sitemaps。

Sitemaps 索引文件的 XML 格式与 Sitemaps 文件的 XML 格式非常相似。Sitemaps 索引文件使用以下 XML 标记:

注:Sitemaps 索引文件只能指定与其位于同一网站的 Sitemaps。例如,http://www.yoursite.com/sitemap_index.xml 可包含位于 http://www.yoursite.com 的 Sitemaps,但不能包含位于 http://www.example.comhttp://yourhost.yoursite.com 的 Sitemaps。与 Sitemaps 一样,您的 Sitemaps 索引文件应为 UTF-8 编码。

XML Sitemaps 索引示例

下例展示了一个 XML 格式的 Sitemaps 索引。该 Sitemaps 索引列出了两个 Sitemaps:

<?xml version="1.0" encoding="UTF-8"?>
   <sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">
     <sitemap>
        <loc>http://www.example.com/sitemap1.xml.gz</loc>
        <lastmod>2004-10-01T18:23:17+00:00</lastmod>
     </sitemap>
     <sitemap>
        <loc>http://www.example.com/sitemap2.xml.gz</loc>
        <lastmod>2005-01-01</lastmod>
     </sitemap>
   </sitemapindex>

备注:与 XML 文件中的所有值一样,Sitemaps 网址需要实体换码。

Sitemaps 索引 XML 标记定义

  • 需要有 <loc> 标记并用其来识别 Sitemaps 的位置。
  • <lastmod> 标记是可选标记,用于指示相应 Sitemap 文件的修改时间。它并不对应于该 Sitemap 中列出的任一网页的更改时间。lastmod 标记的值应采用 W3C Datetime 格式。通过提供最近修改的时间戳启用搜索引擎抓取工具,抓取工具将只检索索引中的 Sitemaps 的一个子集,也就是说,抓取工具只检索某特定日期之后修改的 Sitemaps。通过这一递增的 Sitemaps 提取机制,可以快速发现超大型网站上的新网址。
  • <sitemap> 标记封装单个 Sitemaps 的相关信息。
  • <sitemapindex> 标记会压缩有关文件中的所有 Sitemaps 的信息。

Sitemaps 文件的位置

Sitemaps 文件的位置决定该 Sitemaps 中所能包含的一组网址。位于 http://example.com/catalog/sitemap.gz 的 Sitemaps 文件可包含以 http://example.com/catalog/ 开始的任何网址,但不能包含以 http://example.com/images/ 开始的网址。

如果您有更改 http://example.org/path/sitemap.gz 的许可,您应该也可以提供以 http://example.org/path/ 作为前缀的网址的信息。

http://example.com/catalog/sitemap.gz 中,被认为有效的示例网址包括:

http://example.com/catalog/show?item=23
http://example.com/catalog/show?item=233&user=3453

http://example.com/catalog/sitemap.gz 中被认为无效的网址包括:

http://example.com/image/show?item=23
http://example.com/image/show?item=233&user=3453
https://example.com/catalog/page1

被认定为无效的网址将不再考虑。强烈建议将 Sitemaps 放置在 Web 服务器的根目录处。例如,如果 Web 服务器位于 example.com,则 Sitemaps 索引文件应位于 http://example.com/sitemap.gz。在某些情况下,您需要针对不同的路径创建对应的 Sitemaps,例如,如果在您的组织中,安全许可对应不同目录划分上传权限。

常见问题解答

在 Sitemaps 中如何表示网址?

我使用哪种字符编码方法生成 Sitemap 文件有关系吗?

我如何指定时间?

如何计算 lastmod 日期?

应该将 Sitemap 文件放在哪里?

我的 Sitemap 可以有多大?

我的网站拥有几千万个网址;我可以只提交最近更改过的网址吗?

创建 Sitemap 后该作些什么?

Sitemap 中的网址需要完整地指定吗?

我的网站同时具有“http”和“https”格式的网址。需要把它们都列出来吗?

我网站的网址中包含会话 ID。我需要将它们删除吗?

网址在 Sitemap 中的位置是否会影响它的使用?

我网站上的一些网页使用框架。应该提供框架组网址或框架内容的网址吗?

我可以压缩我的 Sitemap 吗?它们是否需要用 gzip 压缩?

XML Sitemap 中的“priority”提示会影响我的网页在搜索结果中的排名吗?

有可以用作 XML Sitemap 验证依据的 XML 架构吗?

如果我在使用协议或提交 Sitemap 时遇到其他问题怎么办?


问题:在 Sitemap 中如何表示网址?

就像所有 XML 文件一样,任何数据值(包括网址)都应使用以下字符的实体转义码:& 符号 (&)、单引号 (‘)、双引号 (“)、小于号 (<) 和大于号 (>)。还应确保所有网址遵循 RFC-3986 URI 标准、RFC-3987 IRI 标准以及 XML 标准。如果您要使用脚本来生成网址,通常可以使用网址转义的方式将其转义为该脚本的一部分,并且您仍然需要对它们进行实体转义。例如,以下 Python 脚本实体转义 http://www.example.com/view?widget=3&count>2

$ python
Python 2.2.2 (#1, Feb 24 2003, 19:13:11)  
>>> import xml.sax.saxutils
>>> xml.sax.saxutils.escape("http://www.example.com/view?widget=3&count>2")

以上示例所得网址为:

http://www.example.com/view?widget=3&amp;count&gt;2

问题:我使用哪种字符编码方法生成 Sitemap 文件有关系吗?

是的。您的 Sitemap 文件必须使用 UTF-8 编码。

问题:我如何指定时间?

对本协议中的 lastmod 时间戳以及所有其他日期和时间,请使用 W3C Datetime 编码。例如,2004-09-22T14:12:14+00:00。

此编码允许您省略 ISO8601 格式的时间部分,例如,2004-09-22 也是有效的。然而,如果您的网站频繁更改,则建议您使用时间部分,以便抓取工具可获取关于您网站的更全面的信息。

问题:如何计算 lastmod 日期?

对于静态文件,这是实际的文件更新日期。可以使用 UNIX 日期命令获取此日期:

$ date --iso-8601=seconds -u -r /home/foo/www/bar
>> 2004-10-26T08:56:39+00:00

对于许多动态网址,您可以根据基本数据的更改时间或使用一些定期更新(如果适用的话)的近似值,轻松推算出 lastmod 日期。使用一个近似日期或时间戳就可以帮助抓取工具避免抓取还未更改的网址。这将降低网络服务器的带宽和 CPU 要求。

问题:应该将 Sitemap 文件放在哪里?

强烈建议将 Sitemap 放在 HTML 服务器的根目录中,即 http://example.com/sitemap.xml

在某些情况下,您或许希望在网站上针对不同的路径创建不同的 Sitemap,例如,如果您公司的安全许可对应不同的目录划分写入权限。

我们认为,如果您有上传 http://example.com/path/sitemap.xml 的权限,那么您也可以通过 http://example.com/path/ 报告元数据。

Sitemap 列出的所有网址必须和 Sitemap 位于同一个主机上。例如,如果 Sitemap 位于 http://www.example.com/sitemap.xml,就不能包含 http://subdomain.example.com 中的网址。如果 Sitemap 位于 http://www.example.com/myfolder/sitemap.xml,就不能包含 http://www.example.com 中的网址。

问题:我的 Sitemap 可以有多大?

Sitemap 不得超过 10MB(10,485,760 字节),所包含的网址数最多为 50,000 个。这些限制条件有助于确保网络服务器不会因传输非常大的文件而遇到麻烦。这表示如果您网站包含的网址超过 50,000 个或您的 Sitemap 超过 10MB,则需要创建多个 Sitemap 文件,并且需要使用 Sitemap 索引文件。即使您的网站较小,但计划增长到网址数量超出 50,000 个的大网站或文件大小超过 10MB,也应使用 Sitemap 索引文件。Sitemap 索引文件最多可包含 1,000 个 Sitemap,并且不得超过 10MB(10,485,760 字节)。您也可以使用 gzip 压缩 Sitemap。

问题:我的网站拥有几千万个网址;我可以只提交最近更改过的网址吗?

您可以在少数频繁更改的 Sitemap 中列出已更新的网址,然后使用 Sitemap 索引文件中的 lastmod 标记识别这些 Sitemap 文件。随后,搜索引擎即可逐步抓取(只抓取)这些已更改的 Sitemap。

问题:创建 Sitemap 后该作些什么?

Once you have created your Sitemap, let search engines know about it by submitting directly to them, pinging them, or adding the Sitemap location to your robots.txt file.

问题:需要在 Sitemap 中指定完整的网址吗?

是的。您需要在网址中提供协议(例如,http)。如果网络服务器有要求,您还需要在网址中加入尾随斜杠。例如,http://www.example.com/ 对 Sitemap 来说是有效网址,而 www.example.com 则不是。

问题:我网站上同时有“http”和“https”格式的网址。需要把它们都列出来吗?

否。请在 Sitemap 中只列出一种格式的网址。包含多种格式的网址可能会导致抓取工具无法完整地抓取网站。

问题:我网站的网址中包含会话 ID。我需要将它们删除吗?

是的。在网址中包含会话 ID 号可能会导致网站抓取不完整以及重复抓取。

问题:网址在 Sitemap 中的位置是否会影响它的使用?

否。网址在 Sitemap 中的位置并不会影响搜索引擎对它的使用或识别方式。

问题:我网站上的一些网页使用框架。我应该加入框架组网址或框架内容的网址吗?

请将两种网址都包括进来。

问题:我可以压缩我的 Sitemap 吗?它们是否需要用 gzip 压缩?

请使用 gzip 压缩 Sitemap。请记住,无论压缩与否,Sitemap 均不得超过 10MB(10,485,760 字节)。

问题:XML Sitemap 中的“priority”提示会影响我的网页在搜索结果中的排名吗?

Sitemap 中的“优先级”提示只是说明特定网址相对于您自己网站上其他网址的重要性,并不会影响网页在搜索结果中的排名。

问题:有可以用作 XML Sitemap 验证依据的 XML 架构吗?

是的。在 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd 上可以找到适用于 Sitemap 文件的 XML 架构;在 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd 上则可以找到适用于 Sitemap 索引文件的架构。您也可以进一步了解有关验证 Sitemap 的详情。

问题:如果我在使用协议或提交 Sitemap 时遇到其他问题该怎么办?

有关提交和使用 Sitemap 的详情,请参阅各个搜索引擎提供的文档。

robots.txt文件讲解

一、NAME变量

name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。

1、Keywords (关键字)

用法:<Meta name=”Keywords” Content=”关键词1,关键词2,关键词3,关键词4″>

为搜索引擎提供的关键字列表。注意:各关键词间用英文半角逗号“,”隔开。关键词数量最好保持在5个以内,关键词要和页面内容相关。

2、Description (简介)

用法:<Meta name=”Description” Content=”你网页的简述”>

Description用来告诉搜索引擎你的网站或该页面的主要内容,描述内容要和页面内容相关,字数在150个字以内。

3、Robots (机器人向导)

用法:<Meta name=”Robots” Content=”All|None|Index|Noindex|Follow|Nofollow”>

说明:Robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。

常用寫法如下:

<meta name=”robots” content=”index,follow”>

<meta name=”robots” content=”noindex,follow”>

<meta name=”robots” content=”index,nofollow”>

<meta name=”robots” content=”noindex,nofollow”>

all: 文件将被检索,且页面上的链接可以被查询;none:文件将不被检索,且页面上的链接不可以被查询;(和 “noindex, no follow” 起相同作用);index:文件将被检索;(让robot/spider登录);follow:页面上的链接可以被查询;noindex:文件将不被检 索,但页面上的链接可以被查询;(不让robot/spider登录);nofollow:文件将不被检索,页面上的链接可以被查询。(不让robot /spider顺着此页的连接往下探找)。

http://www.google.com/robots.txt

robots.txt里面可以加上Sitemap,另外要注意的是robots.txt必需是小寫.

User-agent: *

Sitemap: http://www.afumao.com/sitemap.xml

Disallow: /admin

Sitemap格式:

http://www.google.cn/sitemap.xml

http://www.lesishu.cn/sitemap.xml

自動生成sitemap

http://www.xml-sitemaps.com/

格式說明: http://hi.baidu.com/jroam/blog/item/b6fd499034a1488aa877a4c2

4、Author (作者)

用法:<Meta name=”Author” Content=”中国教育总网,eduzw@163.com”>

标注网页的作者或制作组。Content可以是:你或你的制作组的名字或Email。

5、Copyright (版权)

用法:<Meta name=”Copyright” Content=”本页版权归毅衡所有。All Rights Reserved icediary”>

标注版权。

6、Generator (编辑器)

用法:<Meta name=”Generator” Content=”PCDATA|FrontPage|”>

编辑器的说明。

7、revisit-after (重访)

用法:<META name=”revisit-after” CONTENT=”7 days” > Www_Chinaz_com

一般用做引导搜索引擎重新访问你的站点的时间间隔,一般使用days。

 

怎样通过短网址处理防采集

2015年2月25日

如何在防止采集爬虫的同时,不影响搜索引擎爬虫?

1. 让采集爬虫采不了——主动防御

A. 通过iptables设置,屏蔽异常IP。

B. 在编写采集规则的时候,要获取采集对象,都会要寻找采集对象在HTML中开始和结束的唯一标记。通过模板优化,让采集者找不到这个唯一的标记,也就无法采集。

2. 让采集爬虫采了也用不了——被动防御

A. 正文中加入混淆字符串,无法清理。即便被采集后再发布,正文无法正常阅读。

3. 不怕采集爬虫采——反向劫持

A. 活用“欲知详情,请看下回分解”的思想,一个观点分几个文章来描述,做好网站内链。即便被采集后再发布,也存在死链,或者贡献流量。

B. 正文中的链接全部进行自有短网址服务处理。即便被采集后再发布,也只是向自有短网址服务贡献流量——不怕你不采,越采越开心。

参考案例:

http://www.nulledphp.com 中 使用 http://www.mije.net 对外链进行短网址处理。

文章网址:http://www.nulledphp.com/65651-inout-search-engine-v80-non-nulled
下载网址:http://rghost.net/8pXg55B6l
短址处理:http://www.mije.net/1/aHR0cDovL3JnaG9zdC5uZXQvOHBYZzU1QjZs

http://www.mije.net使用的源码是基于Nadeem Syed开发的URL Shortener[adf.ly_clone],“/1/”透露出使用者是这套程序的第一个注册用户,“aHR0cDovL3JnaG9zdC5uZXQvOHBYZzU1QjZs”是通过Base64加密函数处理后的原始下载网址,这样解决了原版是明文显示原始下载网址的问题(完全可以在采集中获取,也就失去了防采集的意义)。

如何确认http://www.mije.net是使用Base64加密函数呢?

将“aHR0cDovL3JnaG9zdC5uZXQvOHBYZzU1QjZs”填入http://tools.namedog.com/code-converter/ 的Base64这一栏,可见在文本格式这一栏解码出“http://rghost.net/8pXg55B6l”。

http://www.mije.net是在哪里使用Base64加密函数呢?

发现是在 http://www.mije.net/js/fp.js.php

是通过JS编写的Base64加密函数对外链进行筛选,并处理输出。

怎样克隆这一功能呢?思路如下:

scr.me原程序会把正文中的外链(比如http://www.google.com/)都置换为http://scr.me/1/http://www.google.com/

而mije.net 改造这个程序后,把外链都进行base64加密,实现 http://scr.me/1/aHR0cDovL3d3dy5taWplLm5ldC8= ;并且最后一步让 http://scr.me/1/aHR0cDovL3d3dy5taWplLm5ldC8= 在浏览器中打开时 进行base64解密,打开 http://scr.me/1/http://www.google.com/

1. fp.js.php中关于网址处理的JS代码重新写过。

2. 全站处理的JS代码也完全不同。

如果简单地使用mije.net的相关JS语句代入scr.me,发现虽然页面外链已按预期实现了Base64加密,但是无法实现解密原网址,直接跳转到首页。其实在scr.me默认模式,如果网址格式错误,也是跳转到首页。那么,问题是,在新模式下,并未完成解密即输出。

这是什么问题呢?难道在其他PHP文件中有所修改?可能是处理短网址的那个PHP程序?

研究scr.me的.htaccess:

DirectoryIndex index.php

FileETag none
ServerSignature Off

Options All -Indexes

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([0-9a-zA-Z]{1,6})$ links/?to=$1 [L]
RewriteRule ^([0-9]{1,9})/banner/(.*)$ links/?uid=$1&adt=2&url=$2 [L]
RewriteRule ^([0-9]{1,9})/(.*)$ links/?uid=$1&adt=1&url=$2 [L]
</IfModule>

比较mije.net的.htaccess:

DirectoryIndex index.php

FileETag none
ServerSignature Off

Options All -Indexes

<IfModule mod_rewrite.c>
RewriteEngine On

  # To redirect all users to access the site WITH the 'www.' prefix,
  # (http://example.com/... will be redirected to http://www.example.com/...)
  # uncomment the following:
   RewriteCond %{HTTP_HOST} !^www\. [NC]
   RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
   
#RewriteRule ^([0-9a-zA-Z]{1,6})$ fly/?to=$1 [L]
#RewriteRule ^([0-9]{1,9})/banner/(.*)$ fly/?uid=$1&adt=2&url=$2 [L]
RewriteRule ^r/(.*)$ fly/?uid=0&adt=3&url=$1 [L]
RewriteRule ^([0-9]{1,9})/(.*)$ fly/?uid=$1&adt=1&url=$2 [L]
</IfModule>

于是可以确定是/links/index.php这个文件中控制。而生成短网址对原网址进行拆解的函数在/inc/utilities.class.php。应该在/links/index.php文件中引入Base64解密函数,然后输出应该会正常。

当然,这种方案因为Base64加密函数是可逆的,采集方只需要对所有短网址链接进行一次Base64解密处理,即可还原原始外链。

但是,毕竟这是个防盗链的方法。并非所有采集者有技术去实现全局解密或者临时解密。

http://www.mije.net可能通过以下函数实现了对外链网址变量值的加密解密的功能。

加密代码如下:

/*
*功能:对字符串进行加密处理
*参数一:需要加密的内容
*参数二:密钥
*/
function passport_encrypt($str,$key){ //加密函数
	srand((double)microtime() * 1000000);
	$encrypt_key=md5(rand(0, 32000));
	$ctr=0;
	$tmp='';
	for($i=0;$i<strlen($str);$i++){
		$ctr=$ctr==strlen($encrypt_key)?0:$ctr;
		$tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);
	}
	return base64_encode(passport_key($tmp,$key));
}

解密代码如下:

/*
*功能:对字符串进行解密处理
*参数一:需要解密的密文
*参数二:密钥
*/
function passport_decrypt($str,$key){ //解密函数
	$str=passport_key(base64_decode($str),$key);
	$tmp='';
	for($i=0;$i<strlen($str);$i++){
		$md5=$str[$i];
		$tmp.=$str[++$i] ^ $md5;
	}
	return $tmp;
}

辅助函数:

/*
*辅助函数
*/
function passport_key($str,$encrypt_key){
	$encrypt_key=md5($encrypt_key);
	$ctr=0;
	$tmp='';
	for($i=0;$i<strlen($str);$i++){
		$ctr=$ctr==strlen($encrypt_key)?0:$ctr;
		$tmp.=$str[$i] ^ $encrypt_key[$ctr++];
	}
	return $tmp;
}

使用如下所示:

$str='http://www.domain.com';
$key='123456';
$encrypt=passport_encrypt($str,$key);
$decrypt=passport_decrypt($encrypt,$key);

echo '原文:',$str."<br><hr>";
echo '密文:',$encrypt."<br><hr>";
echo '译文:',$decrypt."<br><hr>";

参考资料:

怎样做Amazon联盟

2015年2月24日

http://www.yihnet.com/2013/09/08/amazon-associates-guide-for-beginners/

http://www.yihnet.com/2013/09/15/how-to-select-best-wordpress-plugin-for-amazon-affiliate/