+ -
当前位置:首页 → 问答吧 → 让网友来帮您生成网页!利用404状态自动生成静态页!

让网友来帮您生成网页!利用404状态自动生成静态页!

时间:2006-08-03

来源:互联网

!!本文章绝对原创!! 转载请勿删减文字,以免代码出错。

目的:让网友来帮您生成网页!HBcms可以利用web服务器的404状态,自动为您生成网页。

原理:网友访问网页123.html,如果这个网页不存在,触发404状态,调用 404.php 文件,自动跳转到程序地址,生成并显示网页123.html

高效:网友再次访问网页123.html,因为网页123.html刚才已经自动生成了,所以就可以直接打开网页了。

演示:您可以访问hbcms官方网站看效果演示 http://www.hbcms.com/

使用:首先,您的空间需要支持自定义404错误页面(目前多数虚拟主机都支持)
      其次,请将404错误页面指向 /hbcms/include/hbw.cn/config/404.php 就可以了

独家:hbcms是目前唯一一个可以利用服务器的404状态生成静态页文件的cms系统!

扩展:下面是本系统的 404.php 的源代码,如果您是php程序员,可以自己进行扩展。如有更优化更高效的版本,请和大家分享!
复制内容到剪贴板
代码:

<?php
// +----------------------------------------------------------------------+
// | HBcms系统:利用web服务器404状态跳转自动生成静态页                    |
// +----------------------------------------------------------------------+
// | This source file is released under the BSD License                   |
// +----------------------------------------------------------------------+
// | Copyright (c) 2006-2009 http://www.hbcms.com/ http://www.hbw.cn/     |
// +----------------------------------------------------------------------+
//
// $Id: 404.php,v 1.0 2006/07/20 12:19:30 aashley Exp $


// 私有变量
$article_dir = 'cms';
$cms_dir = 'hbcms';
$jump_url = '';    // 404状态默认跳转地址

// 获取原网页url,需兼容Apache,IIS,php不同安装模式
if ( isset($_SERVER['REDIRECT_URL']) )    {
    $my_url = $_SERVER['REDIRECT_URL'];
} else if ( isset($_SERVER['URL']) )    {
    $my_url = $_SERVER['URL'];
} else if ( isset($_SERVER['REQUEST_URI']) )    {
    $my_url = $_SERVER['REQUEST_URI'];
}

// 分析原网页url
if ( isset($my_url) && eregi('/' . $article_dir . '/',$my_url) && eregi('.html$',$my_url) )  {
    $basename_ary = explode('.',basename($my_url));
    $pg_ary = explode('_',$basename_ary[0]);

    // 列表页面
    if ( count($pg_ary) == 2 && is_numeric($pg_ary[0]) && is_numeric($pg_ary[1]) )   {
        $jump_url     = '/' . $cms_dir . '/php/article_list.php?pageID=' . $pg_ary[1] . '&type_id=' . $pg_ary[0];
    }

    // 文章页面
    if ( count($pg_ary) == 1 && is_numeric($pg_ary[0]) )   {
        $jump_url     = '/' . $cms_dir . '/php/article_detail.php?article_id=' . $pg_ary[0];
    }
}

// php程序员可以在此处追加一些其它的处理过程
// http://www.hbcms.com/
// http://www.hbw.cn/
// ......
// ......


if ( $jump_url != '' )    {
    // 执行跳转
    header("HTTP/1.1 301 Moved Permanently"); // 面向搜索引擎的友好模式
    header("location:$jump_url");
    exit();
} else {
    // 其他异常处理
    header("Content-Language: charset=zh-cn");
    header("Content-type: text/html; charset=GB2312");
    echo '<P> 页面不存在,请访问<a href=/>网站首页</a> ! ';
    echo '<HR> The page you requested does not exist or has moved, ';
    echo '<P> <a href=/>Please Visit Our Homepage</a>';
    exit();
}

?>  
进阶:由于部分虚拟主机不支持直接将php文件作为404状态的执行页面,因此,我们特别制作了shtml版本。
      下面是本系统的 404.shtml 的源代码,如果您比较熟悉javascript脚本,可以自己进行扩展。
      本文件路径为: /hbcms/include/hbw.cn/config/404.shtml 如有更优化更高效的版本,请和大家分享!
复制内容到剪贴板
代码:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>文件不存在 - HBcms自动生成网页shtml版本</title>
<style>
body,td{font-size:9pt;}
a{color:blue}
</style>
</head>

<base target="_self"></base>
<body leftmargin="0" topmargin="0" bgcolor="white">

<SCRIPT LANGUAGE="JavaScript">
<!--

var cms_dir        = 'hbcms';
var article_dir    = 'cms';

var uri            = '<!--#echo var="REQUEST_URI" -->';
var my_url        = uri.split('\?')[0];
var f_basename    = location.href.match("[^/]*$")[0];
var basename    = f_basename.split('\?')[0];
var jump_url    = '';

function hbcms_is_article(s)
{
    var patrn=/\/(.){2}\/[0-9]{0,10}\.html$/;
    if (!patrn.exec(s)) return false;
    return true;
}

function hbcms_is_article_list(s)
{
    var patrn=/\/(.){1,}\/[0-9]{0,10}_[0-9]{0,10}\.html$/;
    if (!patrn.exec(s)) return false;
    return true;
}

function jump(url)    {
    location.href = url;
    return true;
}

function hbcms_handle_page()    {
    if ( my_url.indexOf('/' + article_dir + '/') != -1 && my_url.indexOf('/' + cms_dir + '/') != -1 )
    {
        if ( hbcms_is_article(my_url) )
        {
            article_id    = basename.split('\.')[0];
            jump_url    = '/' + cms_dir + '/php/article_detail.php?article_id=' + article_id;
            jump(jump_url);
        }
        else if ( hbcms_is_article_list(my_url) )
        {
            type_pg = basename.split('\.')[0];
            type_pg_ary = type_pg.split('_');

            jump_url = '/' + cms_dir + '/php/article_list.php?type_id=' + type_pg_ary[0] + '&pageID=' + type_pg_ary[1] + '';
            jump(jump_url);
        }
    }
}

// 您可以在此处追加一些其它的处理过程
// http://www.hbcms.com/
// http://www.hbw.cn/
// ......
// ......

/* 开始执行处理过程 */
hbcms_handle_page();


//-->
</SCRIPT>

<P>&nbsp;<P>
<TABLE align=center>
<TR>
    <TD align=center>

    <H4>网页不存在</H4>
您访问的页面已经被管理员删除或不存在

<SCRIPT LANGUAGE="JavaScript">
<!--
if ( jump_url != '' )
{
    document.write('<P><FONT COLOR="red">系统正在自动生成该网页....</FONT>');
    document.write('<p>如果10秒后网页还停留在此处,<A HREF="'+jump_url+'">请点击这里</A>');
    document.write('<P>或者<P>');
}
//-->
</SCRIPT>
   <P> 请访问<a href=/>网站首页</a>


<P>

The page you requested does not exist or has moved!
<P> <a href=/>Please Visit Our Homepage</a>
<P>
You requested page is :
<P>
<!--#echo var="REQUEST_URI" -->
<P>

HBcms自动生成网页shtml版本
<P>
    </TD>
</TR>
</TABLE>
</BODY>
</HTML>
[ 本帖最后由 hbcms 于 2006-8-2 17:32 编辑 ]

作者: hbcms   发布时间: 2006-08-02

<!--#include file="404.php" -->
可以不呵呵~

作者: EastSon   发布时间: 2006-08-02

引用:
原帖由 dashan 于 2006-8-2 17:33 发?
<!--#include file="404.php" -->
可以不呵呵~
当然不行。

如果是 <!--#include file="生成页面的程序.php?传递所需要的参数" --> 或许可以,要测试,不知道是否支持参数传递

[ 本帖最后由 hbcms 于 2006-8-2 17:37 编辑 ]

作者: dashan   发布时间: 2006-08-02

测试了
<!--#include file="生成页面的程序.php?传递所需要的参数" -->

不能传递参数,报错:

[an error occurred while processing this directive]

作者: hbcms   发布时间: 2006-08-02

引用:
原帖由 hbcms 于 2006-8-2 17:47 发表
测试了
<!--#include file="生成页面的程序.php?传递所需要的参数" -->

不能传递参数,报错:

哈哈我错了,支持楼主!:lol~~

作者: hbcms   发布时间: 2006-08-02

好东西,收藏先

谢谢楼主!!

作者: dashan   发布时间: 2006-08-02

好想法
找�r�g����

作者: lmhllr   发布时间: 2006-08-03

只有想不到没有做不到

作者: benero   发布时间: 2006-08-04

哈哈,我们公司就是直使用这方法

作者: 七月十五   发布时间: 2006-09-04

这个思路不错,

受益!

作者: herbwang   发布时间: 2006-09-04

有创意

作者: coolstr   发布时间: 2006-09-05

不错.

作者: barani   发布时间: 2006-09-06

东西实用不~!

作者: szy_session1987   发布时间: 2006-09-09

不知道楼主对于“已生成的静态页的更新”有怎么样的设计思路呢?

作者: ClearWind   发布时间: 2006-09-10

不错不错

作者: neuron   发布时间: 2006-09-12

广告页,没有核心技术,不置可否

作者: fnet   发布时间: 2006-09-26

作者: mzli   发布时间: 2006-09-26

狂好的思路,这可以解决大型网站全站生成静态的问题

作者: 1128sky7   发布时间: 2007-08-02

引用:
原帖由 neuron 于 2006-9-10 20:33 发表
不知道楼主对于“已生成的静态页的更新”有怎么样的设计思路呢?
已生成的静态页更新,我想了想:可以用一下几种方法,一种是ajax,静态页自动用ajax载入,这样你更新数据库,也就更新了。
另一种是用js,后台生成js,或者我想php动态生成js。


办法很多的,希望有更多人讨论

作者: fnet   发布时间: 2007-08-02

搜索引擎会怎么看你的站点???

作者: fnet   发布时间: 2007-10-02

引用:
原帖由 七月十五 于 2006-8-4 23:16 发表
只有想不到没有做不到
:lol

作者: youreyes   发布时间: 2007-10-02

有个问题。。。
生成的静态页里面放些什么呢?
还有一个,
如果人家发现了这个,不断地随便输入网址,就会不断地生成html?

作者: 疯子-斯   发布时间: 2008-01-18

引用:
原帖由 fnet 于 2007-8-2 10:45 发表




已生成的静态页更新,我想了想:可以用一下几种方法,一种是ajax,静态页自动用ajax载入,这样你更新数据库,也就更新了。
另一种是用js,后台生成js,或者我想php动态生成js。


办法很多的,希望有更多 ...
貌似不懂,你说的这个什么载入之类的,不知道该怎么去触发

作者: sundyandy   发布时间: 2008-01-23