首页 > BLOG建设 > wordpress自定义404错误页面

wordpress自定义404错误页面

2009年5月23日 发表评论 阅读评论

  看别人的wordpress似乎都有自定义404错误页面。而我的站在之前访问不存在的文章或页面时会提示”对不起,不存在相应的文章”,而且返回的状态码是200.200对于搜索引擎来说表示这个页面存在。如果被搜索引擎访问到太多这样的本身不存在但状态码是200的页面,那么在搜索引擎中网站的质量将会降低。

  网上搜索wordpress自定义404错误页面的文章,不过都没找到可以很好解决的方法。似乎别人的主题不用修改就能达到在文章或页面不存在时返回404错误代码。在分析了wordpress验证url对应的页面类型后感觉太复杂了。判断页面类型主要是在wp-include中的canonical.php,query.php这两个文件中进行的。

下面是我对这个过程的理解和看法:
  在进行URL重写后,如本站当一个URL被请求,都会被按一定的规则转发给/index.php,然后判断请求的页面的类型,不过从的我分析上看,转发后的页面类型似乎永远也不可能是404。
  如访问本站http://www.opsunv.com/category/blogbuilding/,通过URL重写后实际上是访问的http://www.opsunv.com/index.php?category_name=blogbuilding,这时访问的页面的类型就已经被确定为category类型。其他形式的URL也对应一种URL重写规则。这样任何形式(除了被例外的)的URL最终都会被转发给index.php,在到达index.php前,请求的页面其实已经通过URL被确定了类型。所以不可能是404类型。
  当访问某篇文章,判断这篇文章是否存在之前wordpress已经认为所访问的页面为文章类型。那么如果这篇文章不存在WORDPRESS也就给一个简单的提示”对不起,不存在相应的文章”。

为了让文章或页面不存在时能转向自定义404页面且返回的状态码也为404,我的方法是:
在/index.php中添加一行代码

ob_start();

把主题所提供的404.php(如果没有可以自行建立)修改成如下形式:

<?php
ob_end_clean();//清除前面输出的内容,因为在前面有输出时设置HTTP头会出错。
header("HTTP/1.1 404 Not Found"); 
header("Status: 404 Not Found");
?>
.....(这里是原来的一些代码,或者自行添加的)
<?php exit;?>

这样在你想要返回404的地方添加下面的代码就可以达到返回404的效果。

<?php include('404.php');?>

如我的主题INOVE的single.php修改后:

<?php if (have_posts()) : the_post(); update_post_caches($posts); ?>
<!--存在文章时显示相关文章。-->
.....(一些代码)
<?php else : ?>
<!--不存在时转向404错误页面-->
<?php include('404.php');?>
<?php endif; ?>
...(一些代码)

效果:http://www.opsunv.com/asdq
PS:可能有些地方未能表达清楚(表达能力差-_-!),如果有疑问请留言。感觉上我这个方法太麻烦,应该有更简单的方法,如果您知道请告诉我。
另外对ob_start();打开缓冲区这个操作会带来的影响不清楚,也许某些情况下会出问题。(不过目前本站还未见任何异常)

分类: BLOG建设 标签:
  1. 2009年10月5日23:52 | #1

    我只想知道怎么新建一个页面,新建的页面写什么代码可以调用当前模板中的404.php页面,不知道楼主知道没有,知道的话,给我pm一下,谢了

  2. 2009年10月8日23:33 | #2

    你的wp放在apache还是iis上?apache上不用修改似乎都可以,一般主题自带一个404.php直接修改这个文件就行。

点击刷新