1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

phpbb的假静态化方法

本帖由 laogui2006-02-15 发布。版面名称:源码讨论

  1. laogui

    laogui Administrator
    管理成员

    注册:
    2005-08-30
    帖子:
    15,216
    赞:
    35
    Apache 特有的 rewrite 技术很好用,Rewrite 很简单的说,就是把类似
    ==> /phpbb2/viewtopic.php?t=1388&start=0
    动态网页,转成
    ==> /phpbb2/viewtopic-1388-0.html

    好处有:
    1. URL 短一点,静态网址的接受度较高。
    2. Search Engine 比较吃的下去~
    3. 静态的网址会有比较好的 SE-BENCHMARK

    ===========================================
    ===========================================
    在这里举 PHPBB2 2.0.3 的例子来说,一步一步来:

    1. 把 Apache 的 Rewrite 打开(mod_rewrite)

    2. 在 phpbb/include/page_header.php
    的 // Generate logged in/logged out status 之前加入
    代码:

    ob_start();
    function replace_for_mod_rewrite(&$s)
    {
    $urlin = array(
    "'(?<!/)viewforum.php?f=([a-zA-Z0-9]+)&topicdays=([0-9]*)&start=([0-9]*)'",
    "'(?<!/)viewforum.php?f=([a-zA-Z0-9]+)&mark=topics'",
    "'(?<!/)viewforum.php?f=([a-zA-Z0-9]+)'",
    "'(?<!/)viewtopic.php?t=([0-9]+)&view=previous'",
    "'(?<!/)viewtopic.php?t=([0-9]+)&view=next'",
    "'(?<!/)viewtopic.php?t=([0-9]+)&postdays=([0-9]*)&postorder=([a-zA-Z]*)&start=([0-9]*)'",
    "'(?<!/)viewtopic.php?t=([0-9]+)&start=([0-9]*)'",
    "'(?<!/)viewtopic.php?t=([0-9]+)'",
    "'(?<!/)viewtopic.php?p=([0-9]+)'",
    "'(?<!/)profile.php?mode=viewprofile&u=([0-9]+)'"
    );
    $urlout = array(
    "viewforum-$1-$2-$3.html",
    "forum-$1.html",
    "forum-$1.html",
    "prev-topic-$1.html",
    "next-topic-$1.html",
    "viewtopic-$1-$2-$3-$4.html",
    "viewtopic-$1-$2.html",
    "viewtopic-$1.html",
    "viewpost-$1.html",
    "profile-$1.html"
    );
    $s = preg_replace($urlin, $urlout, $s);
    $s = mb_ereg_replace( "viewtopic-([0-9]+).html&(.*)$", "viewtopic.php?t=\1&\2", $s);
    return $s;
    }


    3. 在 phpbb/include/page_tail.php

    代码:
    在下列?#123;式之后:
    $db->sql_close();

    ?#91;入:
    $contents = ob_get_contents();
    ob_end_clean();
    echo replace_for_mod_rewrite($contents);
    global $dbg_starttime;


    在下列?#123;式之后:
    ob_end_clean();

    ?#91;入:
    echo replace_for_mod_rewrite($contents);
    global $dbg_starttime;



    4. 接下来当然要建立 .htacce 的 rewrite rule

    代码:
    RewriteEngine On
    RewriteRule ^viewforum-([0-9a-zA-Z]+)-([0-9]+)-([0-9]+).html$ viewforum.php?f=$1&topicdays=$2&start=$3
    RewriteRule ^forum-([0-9a-zA-Z]+).html$ viewforum.php?f=$1&mark=topic
    RewriteRule ^forum-([0-9a-zA-Z]+).html$ viewforum.php?f=$1
    RewriteRule ^prev-topic-([0-9]+).html$ viewtopic.php?t=$1&view=previous
    RewriteRule ^next-topic-([0-9]+).html$ viewtopic.php?t=$1&view=next
    RewriteRule ^viewtopic-([0-9]+)-([0-9]+).html$ viewtopic.php?t=$1&start=$2
    RewriteRule ^viewtopic-([0-9]+)-([0-9]+)-([a-zA-Z]*)-([0-9]+).html$ viewtopic.php?t=$1&postdays=$2&postorder=$3&start=$4
    RewriteRule ^viewtopic-([0-9]+).html$ viewtopic.php?t=$1
    RewriteRule ^viewpost-([0-9]+).html$ viewtopic.php?p=$1
    RewriteRule ^viewtopic-([0-9]+).html&highlight=(.*)$ viewtopic.php?t=$1&highlight=$2
    RewriteRule ^profile-([0-9]+).html$ profile.php?mode=viewprofile&u=$1


    5. 测试~ 当然 OK;

    供各位参考,善用 Rewrite 让您的动态网站更美观、更一致、更方便被「吃」 。
     
  2. a江

    a江 New Member

    注册:
    2006-02-05
    帖子:
    138
    赞:
    0
    请问有dz的没啊?
     
  3. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    老外做的是规范,,
    如果要在程序里修改链接的mod_write 就是很失败的。
     
  4. 西子

    西子 New Member

    注册:
    2006-02-09
    帖子:
    5
    赞:
    0
    看不懂。
     
  5. Picky

    Picky New Member

    注册:
    2005-09-04
    帖子:
    538
    赞:
    2
    收藏