介绍
多少次你点击一个HTML链接在一个网页上只得到一个404没有找到错误?破坏的链接存在,因为网页有时会被移动或删除,随着时间的推移,这是网页管理员的工作,以找到那些破坏的链接之前,人类的网页访问者或搜索引擎机器人做。
如果您的网站包含超过几页, 手动检查每个单个链接 变得过于劳动密集型, 您可以使用基于网络的应用程序,如由Google Webmaster Tools和万维网联盟(W3C)提供的应用程序,但它们一般缺乏更先进的功能. 如果您运行WordPress,您可以使用插件,但一些共享的网络托管公司禁止它们,因为它们运行在与网站相同的服务器上,链接检查是资源密集型的.
另一种选择是在单独的机器上使用基于Linux的程序. 这些包括一般的网页扫描仪,可以发现破坏的链接(如wget)和定制的链接扫描仪(如linkchecker和klinkstatus)。
本教程解释了如何使用wget
来找到网站上的所有破坏的链接,以便您可以修复它们。
前提条件
要遵循本教程,您将需要:
- 两台Debian 7 Droplets,一台用于运行(generic-1 ) " wget " 的通用机和一台主机,主机为您的网站(** webserver-1** )。
- ** generic-1** 和** webserver-1** 上的sudo非root用户。 [点击此处] (https://andsky.com/tech/tutorials/how-to-add-delete-and-grant-sudo-privileges-to-users-on-a-debian-vps) 为指示. *webserver-1 需要安装LAMP堆栈. [点击此处] (https://andsky.com/tech/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian) 为指示.
- 联合国 可选的是,网络服务器可以有自己的注册域名. 如果是,请在看到
你的服务员_ip
时使用您的域名。 [点击此处] (https://andsky.com/tech/tutorials/how-to-set-up-a-host-name-with-digitalocean) 为指示. .
虽然本教程是为 Debian 7 编写的,但wget
示例也应该在其他现代 Linux 发行版上运行。
步骤1 - 创建一个样本网页
首先,我们将添加一个具有多个缺失的链接的样本网页。
登录到 webserver-1 . 打开名为 spiderdemo.html’的新文件以使用
nano` 或您最喜欢的文本编辑器进行编辑。
1sudo nano /var/www/spiderdemo.html
這是一個非常簡單的網頁,包含兩個破損的連結,一個內部(在您的伺服器 IP 中添加,在下面顯示)和一個外部。
1<html>
2<head> <title>Hello World!</title> </head>
3<body>
4
5<p>
6<a href="http://your_server_ip/badlink1">Internal missing link</a>.
7<a href="https://www.digitalocean.com/thisdoesntexist">External missing link</a>.
8</p>
9
10</body>
11</html>
保存并关闭文件。
接下来,将spiderdemo.html
的文件所有者和组更改为默认的 Web 服务器用户,即www-data
。
1sudo chown www-data:www-data /var/www/spiderdemo.html
最后,更改新 HTML 文件的文件权限。
1sudo chmod 664 /var/www/spiderdemo.html
您现在可以看到示例页面在http://your_server_ip/spiderdemo.html。
步骤2 - 运行wget
wget
是一个通用网站下载程序,也可以用作网页扫描器,在这个步骤中,我们将配置wget
来报告每个链接是否指向现有页面或被打破而没有下载页面。
** 注意:** 只检查您所拥有的网站上的链接。在网站上检查链接会发生重大计算过剩,因此这些活动可能会被解释为垃圾邮件。
登录 generic-1 并运行以下wget
命令. 每个旗帜的解释如下;您可以为您的使用案例修改此命令。
1wget --spider -r -nd -nv -H -l 1 -w 2 -o run1.log http://your_server_ip/spiderdemo.html
以下是您需要的基本旗帜:
*「--蜘蛛」阻止「wget」下载页面。 *「-r」使「wget」重复跟随页面上的每一个链接。 *「-nd」缩写为「--没有目录」,阻止「wget」在您的服务器上创建一个目录等级(即使它已配置为只有蜘蛛)。 *「-nv」缩写为「--no-verbose」,阻止「wget」提取不需要识别破碎链接的额外信息。
以下是可选参数,您可以使用来定制您的搜索:
*-H',简称
-----------hosts',使`wget'爬入除主域以外的子域和领域(即外部站点)。
-l ' 号
一级'简称为一级'。 默认情况下,
wget'从最初的URL爬入了最深的5个级别,但在这里我们把它设置为1。 您可能需要根据您网站的组织安排来播放此参数 。-w 2',简称
--等',指示wget ' 在请求之间等2秒,以避免轰炸服务器,尽量减少任何性能影响。 *
-o run1.log'将wget'的输出保存到一个名为
run1.log'的文件,而不是在终端显示。 .
在运行上述wget
命令后,使用以下命令从输出文件中提取破碎的链接。
1grep -B1 'broken link!' run1.log
-B1
参数规定,对于每个匹配的行,wget 在匹配的行之前显示一个额外的领先背景线。
1http://your_server_ip/badlink1:
2Remote file does not exist -- broken link!!!
3https://www.digitalocean.com/thisdoesntexist:
4Remote file does not exist -- broken link!!!
步骤 3 - 查找引用 URL
步骤 2 报告破坏的链接,但不识别引用网页,即您网站上的包含这些链接的网页。
一个方便的方法来识别引用 URL 是检查 Web 服务器的访问日志. 登录到 webserver-1 并搜索 Apache 日志,查找破坏的链接。
1sudo grep Wget /var/log/apache2/access.log | grep "HEAD /badlink1"
上面的命令中的第一个抓住
会找到wget
向 Web 服务器的所有访问请求,每个访问请求都包含 User Agent 字符串,该字符串标识了负责生成 Web 请求的软件代理人。
第二个抓住
搜索破坏链接的部分URL(/badlink1
)。
从grep
命令链的样本输出如下:
1111.111.111.111 - - [10/Apr/2015:17:26:12 -0800] "HEAD /badlink1 HTTP/1.1" 404 417 "http://your_server_ip/spiderdemo.html" "Wget/1.13.4 (linux-gnu)"
引用 URL 是行上的第二个最后条目: http://your_server_ip/spiderdemo.html
。
结论
本教程解释了如何使用wget
工具在网站上找到破坏的链接,以及如何找到包含这些链接的引用页面。