`
gstarwd
  • 浏览: 1525114 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自定义404页面(Apache+PHP)

    博客分类:
  • SEO
阅读更多

直接把这个写到虚拟主机配置服务器里面去
# 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页面,也就是当用户访问一个不存在的页面时不显示服务器默认的错误页面,而是显示一个事先做好的提示页面,用户浏览器地址栏的网址依然是他输入/访问的网址。这样做至少有两个好处:

  1. 让用户感到这个错误依然在网站的控制范围内,“这是演出的一部分”。
  2. 让webmaster即时知道有这么一个404页面。

先说说产生404的几种可能

  1. User-Agent(浏览器、搜索引擎bots)会访问固定的文件,例如 Maxthon/Firefox浏览器会请求所有被访问网站的 favicon.ico,如果恰巧那个网站没有这个ico文件,它的服务器log就会多出一行404错误提示,同样的还有搜索引擎请求 robots.txt文件。
  2. 用户错误的输入了URL。比如某人先前访问网站的页面/page1.html,然后利用浏览器地址栏的记录功能重新访问,不料错把backspace当成了回车,意识到后又因为手比脑快直接按回车访问了/page1.htm页面(少了个l)。
  3. 某个页面被删除了,而其他网站,如论坛、搜索引擎还在引用这个链接。

对于第一种情况,当然是上传favicon.ico和robots.txt文件到根目录,制作方法和书写规则不再多说。对于第二种情况,所能做的就是和第三种情况进行区分,既只有因第三种情况发生的时候才通知webmaster进行处理。

下面是Apache + PHP制作自定义404页面的方法。

首先处理文件真的不存在的情况,方法是利用Apache的.htaccess定义,网上介绍的文章 很多 ,不再敷述,方法是在.htaccess最开头加上:ErrorDocument 404 /404.php (/404.php是自定义404页面)。

其次要处理另一种更为常见的404,即数据不存在的404。比如这个Blog系统是数据库驱动的,当用户访问某篇文 章时Blog程序会根据ID查询数据 库,如果恰好这个文章被删除,则应该告诉用户该页不存在,同样的情况还适合于论坛删贴后的提示。目前多数Blog和论坛,及其它数据驱动的网站,处理这种 问题的做法是仅显示不存在的提示而不发送404 header,或者干脆转向到/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的内容,并且发送404 header,并且浏览器地址栏的网址依然是那个用户原始访问的网址。从人类理解的角度往往会把header()语句放在require()上面,但那会 使php停止执行下面的require函数,把header放在最后反而能把404 header发送出来。建议编写论坛、博客和数据驱动网站程序的人都用上面的方法处理数据不存在时的提示信息,避免和搜索引擎产生误会。

最后说说前面提到的通知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页面发送了404 header,搜索引擎会在下次更新索引的时候删除这个页面。如果实在不放心,可以在/404.php页面的头部加上meta tag拒绝所有bot:

<meta content="NOINDEX, NOFOLLOW" name="ROBOTS" />

这样就万无一失了。

分享到:
评论

相关推荐

    (亲测)WindowsServer2008下搭建Apache+PHP+MySQL

    【搭建Apache+PHP+MySQL环境】在Windows Server 2008操作系统中,为了搭建一个高效稳定的Web开发环境,通常会选择集成的WAMP(Windows、Apache、MySQL、PHP)服务器。以下将详细介绍如何一步步地安装和配置这些组件...

    搭建php环境Apache+PHP+mysql

    - 打开浏览器,在地址栏输入`http://localhost`,如果看到Apache的默认欢迎页面,则表示Apache安装成功。 #### 四、安装PHP 1. **解压PHP**:下载并解压PHP安装包,如`php-5.3.13-Win32-VC9-x86.zip`。 2. **移动...

    windows+apache+php5+mysql 部署

    1. 测试Apache:启动Apache服务,通过浏览器访问"http://127.0.0.1",如果出现Apache的欢迎页面,说明安装成功。 2. 配置Apache以支持PHP:修改Apache的配置文件httpd.conf,添加以下行来加载PHP模块: ``` ...

    64位apache+mysql+php5.5.10+memcache

    Apache配置文件(如httpd.conf)允许用户自定义服务器行为,如设置虚拟主机、调整日志记录和控制访问权限。 MySQL是一个流行的关系型数据库管理系统,用于存储和管理网站的数据。尽管在描述中提到MySQL已被删除,但...

    Apache+php+mysql在windows下的安装与配置图解(最新版)

    完成上述步骤后,重启Apache服务,现在你已经在Windows环境下成功构建了一个Apache+PHP+MySQL的开发环境。你可以在这个环境中开发和测试基于PHP的Web应用,并通过MySQL进行数据存储。记得在进行任何配置更改后,都...

    Apache+php+mysql在32位windows7下的安装与配置图解

    8. **测试运行**:在浏览器中输入“http://127.0.0.1”,如果出现Apache的欢迎页面,表明安装成功。 【PHP的安装】 PHP是一种服务器端的脚本语言,常用于Web开发。安装PHP需要从官网下载适合Windows的版本,例如...

    MySQL+Apache+phpserver安装教程

    - **配置完成后测试**:在浏览器中输入 `localhost` 或 `127.0.0.1`,如果显示 Apache 默认页面,则安装成功。 #### 第四章 安装 PHP Server **1. 安装过程** - **启动安装程序**:运行 `E:\lampsoft\...

    Apache+php+mysql在windows

    【Apache+PHP+MySQL在Windows】的配置是一个常见的Web开发环境搭建过程,主要涉及三个关键组件:Apache(一个开源的Web服务器)、PHP(一种服务器端脚本语言)和MySQL(一个关系型数据库管理系统)。以下是对这一...

    Apache+PHP+mysql

    【Apache+PHP+MySQL配置详解】 Apache 是一款广泛使用的开源Web服务器软件,PHP 是一种流行的服务器端脚本语言,而 MySQL 则是常用的开源数据库系统。三者结合,形成了强大的Web开发环境,常用于构建动态网页应用。...

    Apache+php+mysql 手动配置

    - **PHP页面无法正常解析**:确认Apache已经正确加载了PHP模块,且`php.ini`文件中的配置正确。 - **MySQL连接失败**:检查MySQL服务是否已经启动,以及MySQL配置文件`my.cnf`中的配置是否正确。 #### 五、结语 ...

    Win7 配置Apache+PHP+Mysql环境.txt

    ### Win7配置Apache+PHP+Mysql环境详细指南 #### 一、概述 在Windows 7环境下搭建Apache+PHP+MySQL环境是许多开发者在进行Web应用开发时的基础工作之一。本文将详细介绍如何在Windows 7操作系统上安装并配置Apache...

    linux下Apache+PHP+MySQL配置攻略redhat7.2

    ### Linux下Apache+PHP+MySQL配置攻略(Red Hat 7.2) #### 一、系统要求 本配置攻略适用于Red Hat 7.2版本。如果你正在使用的操作系统版本与此不同,请根据实际情况调整步骤。 #### 二、服务器端软件要求 1. **...

    Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结

    - 配置404错误页面:自定义错误页面显示内容。 3. **Tomcat安装与配置** - 安装Tomcat至指定目录 - 配置Tomcat与Apache之间的连接:利用mod_jk模块 - 将mod_jk.dll文件放置到Apache的modules目录下 - 在httpd...

Global site tag (gtag.js) - Google Analytics