IIS/Apache环境下如何做404页面(php/asp中设置)

作者 FarLee 2010年1月29日 16:22:33   ‖浏览(17,143)

在上一篇文章WordPress url rewrite中提到了如何对网址链接进行重写优化,在wp的官方指南Using_Permalinks中强烈建议我们不要将文章名称%postname%,文章分类%category%和标签%tag%作为永久固定链接Permalinks的开头部分,同时为了保证文章的固定链接的在文件目录中不会太深,我就用archives作为固定链接的开头设置了两级目录,比如 http://www.farlee.info/archives/48.html,自定义结构为/archives/%post_id%.html。

但是从文件目录方面考虑,就有这样的问题:http://www.farlee.info/archives 这个页面应该处理?没有经过处理此页面会转向到提示页面不存在的404页面。所以我想第一种解决办法就是什么也不做,系统会自动导向自定义404页面,这样只需再custom一个404页面就可以了,以后其他类似这样的页面问题也可以同时解决了。第二种办法是在WordPress后台添加一个页面page,然后将这个页面的别名设置成archives,最好可以再这个页面上放上任何你想放的内容。第三种办法是给这个页面做个301永久重定向,转向首页。

在网上找了几个 HTTP server header 检查工具(sever header http status checker tool)检查了http://www.farlee.info/archives 页面返回的http状态码,竟然是200 ,而不是“404 Not found”的状态码。搜索引擎通过HTTP状态码来识别网页的状态,当搜索引擎获得了一个错误链接时,网站应该返回404状态码,告诉搜索引擎放弃对该链接的索引。返回200,搜索引擎就会认为此页面是正常的,长此以往,必将导致大量的被搜索引擎所摒弃的重复页面。

到虚拟主机管理后台检查看看是什么问题,原来问题出在网站的虚拟主机是widows IIS6环境,设置出错页面如果是默认的,则可以正确返回404 http header状态码,问题是我启用了它这个虚拟主机管理后台所谓的”自定义404页面 404b.htm”,html 页面代码其实是无法向浏览器发送http header的,只有asp或者php等动态网页有相关的支持。虚拟主机一般也没有相应的权限更改系统的web.config文件,所以要返回404 状态码,现在只能使用丑陋的默认404出错页面。大家如果有什么好的办法希望告知。(2010,1月31 更新,此问题已经解决,方法详见:WordPress 404页面设置)

因此在购买虚拟主机空间的时候,选择apache还是windows IIS?管理系统后台自定义出错页面功能是否正常等这些关键性因素最好优先考虑。像和WordPress最兼容的应该是LAMP 框架模式(即Linux操作系统+ Apache服务器+MySQL数据库+PHP脚本),WAMP(Microsoft Windows)并不能完美支持。

下面是分别介绍如何在IIS和apache 环境下配置asp,ASP.net和php的404页面

1、Apache服务器404页面的设置方法

在.htaccess 文件中加入代码:ErrorDocument 404 /Error.html,上传

建立一个简单的html 404页面命名 Error.html,编辑里面的内容,可以放入链接到首页等位置的超级链接方便访客浏览其他内容,放置google搜索框也是不错的选择。

把 Error.html放置在网站根目录即可。注意:

  • ASP,ASP.net和PHP的404页面(Error.html/asp/php)都一样,这样设置就OK。404错误应工作在服务器级而不是网页级。对定制使用动态页面如PHP脚本类型的404页时,必须确保在PHP执行前服务器已经顺利地送出“404”状态码,不然,一旦执行到了ISAPI级别,返回的状态码便只能是“200”或其他如“302”之类的重定向状态码了。
  • 不要在自定义404错误页面上设置转向,重定向到网站主页或其他页面,否则可能会导致主页在搜索引擎中消失;
  • 不要使用绝对URL(例如:http://www.abc.com/nofound.php形式),使用相对地址,尽管无效链接可能是多种形式的URL,但当发生404访问错误时,WEB服务器会自动将其转到自定义的当404错误页中。 如果使用绝对URL返回的状态码是“302”+“200”。

2、IIS环境下html/ASP.net/ASP/php的404页面设置

首先,修改 iis 服务器应用程序根目录的设置(确保你有相应的权限,如果你是虚拟主机,web.config文件一般IDC都帮你设置好了,到空间管理后台去设置一下就好了),打开 “web.config” 文件编辑,在其中加入如下内容(以asp为例,其他类似):

<configuration>
<system.web>
<customErrors mode=”On” defaultRedirect=”error.asp”>
<error statusCode=”404″ redirect=”notfound.asp” />
</customErrors>
</system.web>
</configuration>

此例中“error.asp”为系统默认的404页面,“notfound.asp”为自定义的404页面,使用时请修改相应文件名。

或者在IIS系统管理后台设置 asp动态页面的404错误页面(如404.asp):在IIS管理器中右键单击要管理的网站,打开“属性”中的“自定义错误信息”页为“404”设定相应的错误信息页即可。不过,此处在“消息类型”中一定要选择“URL”,而不要选择“文件”或“默认值”, 不然,将导致返回“200”状态码。如果你自定义的404页面是静态的(如404.html文件),则“消息类型”要选择“文件”或“默认值”,虽然404.html文件中没有输出404状态,但IIS执行后会自动输出404状态。

然后,在asp/asp.net自定义的404页面“404.asp”中加入:

<%
Response.Status = “404 Not Found”
%>

这样,便可以保证IIS能够正确地返回“404”状态码。

在php 自定义404页面的文件头部加入:

<?php
header("HTTP/1.1 404 Not Found");
?>

jsp也可以。


“IIS/Apache环境下如何做404页面(php/asp中设置)”文章评论(6)

  1. PHPCMS如何做404页面啊?

  2. 还是没有看明白怎么设置

  3. 请教高手指点一下我网站做的404返回码为200 不是404 怎么处理

  4. iis环境下 phpcms v9的404错误页面怎么设置啊。?

  5. phpcms v9 的404页面 iis环境真晕的。。

Trackbacks/Pingbacks

  1. Google 网站管理员工具功能和使用方法 - 远方博客

来说兩句