设为首页 收藏本站
查看: 764|回复: 0

[经验分享] 自定义404页面(Apache+PHP)

[复制链接]

尚未签到

发表于 2017-1-7 07:11:53 | 显示全部楼层 |阅读模式
  直接把这个写到虚拟主机配置服务器里面去
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
  今天做网站的SEO优化,出现了点小问题,问题是这样的,以前网站blog的地址是:blog.xxx.com/?12345,然而id是12345的用户被删除或者是被屏蔽以后,做的处理是转向一个页面,上面写着“您访问的空间不存在!”,并没有做跳转或是其他处理,的确是不够友好,而且一些地址被google收录了,对搜索引擎也很不利。其实网站是有统一的404错误页面的,于是我就想直接header一个404的请求不就完事了吗。
  事实并非如此,并没有像我想的那样,apache这家伙真是不听话啊,它竟然真的给了我一个404的错误页,而不是网站是有统一的404错误页面。看了这篇文章才知道原来是这样啊
  PS:在header('HTTP/1.1 404 Not Found');这个的时候的确在不同的浏览器下会有空白页的情况,不知道是什么原因,呵呵
  以下是该文章,本文转自其他网站。。。(没写哪个网站是因为我看的也是别人转的,也不知道转了几手了)
  本文针对Apache + PHP的网站,如果是Win的,思路也差不多。自定义404页面,也就是当用户访问一个不存在的页面时不显示服务器默认的错误页面,而是显示一个事先做好的提示页面,用户浏览器地址栏的网址依然是他输入/访问的网址。这样做至少有两个好处:

  • 让用户感到这个错误依然在网站的控制范围内,“这是演出的一部分”。
  • 让webmaster即时知道有这么一个404页面。
  先说说产生404的几种可能

  • User-Agent(浏览器、搜索引擎bots)会访问固定的文件,例如Maxthon/Firefox浏览器会请求所有被访问网站的favicon.ico,如果恰巧那个网站没有这个ico文件,它的服务器log就会多出一行404错误提示,同样的还有搜索引擎请求robots.txt文件。
  • 用户错误的输入了URL。比如某人先前访问网站的页面/page1.html,然后利用浏览器地址栏的记录功能重新访问,不料错把backspace当成了回车,意识到后又因为手比脑快直接按回车访问了/page1.htm页面(少了个l)。
  • 某个页面被删除了,而其他网站,如论坛、搜索引擎还在引用这个链接。
  对于第一种情况,当然是上传favicon.ico和robots.txt文件到根目录,制作方法和书写规则不再多说。对于第二种情况,所能做的就是和第三种情况进行区分,既只有因第三种情况发生的时候才通知webmaster进行处理。
  下面是Apache + PHP制作自定义404页面的方法。
  首先处理文件真的不存在的情况,方法是利用Apache的.htaccess定义,网上介绍的文章很多,不再敷述,方法是在.htaccess最开头加上:ErrorDocument 404 /404.php (/404.php是自定义404页面)。
  其次要处理另一种更为常见的404,即数据不存在的404。比如这个Blog系统是数据库驱动的,当用户访问某篇文章时Blog程序会根据ID查询数据库,如果恰好这个文章被删除,则应该告诉用户该页不存在,同样的情况还适合于论坛删贴后的提示。目前多数Blog和论坛,及其它数据驱动的网站,处理这种问题的做法是仅显示不存在的提示而不发送404header,或者干脆转向到/404.php页面(这样浏览器的地址栏就变成了/404.php)。这种做法的缺点是搜索引擎会看到该网站有很多内容相同(都是不存在的提示文字),URL不同的页面,或者是看到该网站有很多通过302转向到同一个页面的情况,这些都有可能被搜索引擎误以为是SPAM而惩罚该网站(很多被惩罚的网站始终认为自己是无辜的,其实都是小错积累的结果)。因为已经pass过了服务器层,.htaccess的404定义不再起作用,所以在读取数据的php文件种针对这种情况应该做以下处理:
  <?
$id = $_GET['id']; //这里获得文章、帖子的索引id
//通过 $id 查询数据库
if(如果没有任何结果)
{
      //以前是仅仅显示“该帖子已经不存在”的提示,现在是:
      require('/404.php');
      @header('HTTP/1.1 404 Not Found');
      @header('Status: 404 Not Found');
      exit;
}
?>
  这样做可以保证显示404.php的内容,并且发送404header,并且浏览器地址栏的网址依然是那个用户原始访问的网址。从人类理解的角度往往会把header()语句放在require()上面,但那会使php停止执行下面的require函数,把header放在最后反而能把404header发送出来。建议编写论坛、博客和数据驱动网站程序的人都用上面的方法处理数据不存在时的提示信息,避免和搜索引擎产生误会。
  最后说说前面提到的通知webmaster的问题,即区分产生404的第二、第三种情况。显然,两种情况的区别是情况二不含有REFERER信息,所以通知webmaster的代码应该是这样的:
  <?
...
if($_SERVER['HTTP_REFERER'] != '') //如果有referer,则证明来自某个页面的点击
{
mail(...把404页面 $_SERVER['REQUEST_URI']和referer页面$_SERVER['HTTP_REFERER']通过email寄到webmaster的信箱);
}
?>
  这样webmaster在收到email后应即时联系$_SERVER['HTTP_REFERER']网站的webmaster修改链接。如果$_SERVER['HTTP_REFERER']是搜索引擎,则因为自定义404页面发送了404header,搜索引擎会在下次更新索引的时候删除这个页面。如果实在不放心,可以在/404.php页面的头部加上meta tag拒绝所有bot:
  <meta content="NOINDEX, NOFOLLOW" name="ROBOTS" />
  这样就万无一失了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324822-1-1.html 上篇帖子: 关于apache commons HttpClient的SocketTimeout误会 下篇帖子: Apache mina 与Spring整合设计
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表