曲径通幽论坛

 找回密码
 立即注册
搜索
楼主: beyes
打印 上一主题 下一主题

从 phpwind8.7 转 DiscuzX3 伪静态完美转换

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2013-10-4 18:18:04 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本站原先也是采用 phpwind8.7 ,但是出于种种考量,还是转到了 Discuz X3 来了。


转换工具 Discuz 那边已经提供了,基本算是完美,但也有瑕疵,比如列表标签它就没提供转换,phpwind 里是 [li] ,而 Disucz 里是 list 。还有更讨厌的是 html 的字符实体,它会原封不动的输出这些,这个需要你自己批量修改数据库,但也比较简单。



    此外,如果转换工具能提供各平台上的伪静态那就更完美了,估计那样会促使一大帮的 phpwind 阵营崩塌,倒不是一个工具使然,而是现在的 phpwind 被马云这个外星人收了之后严重缺乏向心力。

    本站原先是使用所谓的半伪静态的,因为比较懒的去弄全伪静态,而半伪静态只要在后台里直接勾选即可。它的形式如 read.php?tid-2233.html , thread.php?fid-1133.html 。事实上,经过实验证明,搜索引擎并不排斥这种半伪静态。但对于追求完美的人来说,全伪静态看上去会更舒服些,然而最关键的是,如果一开始就采用了全伪静态,那么转换到 Discuz 后,重新设置伪静态就方便多了。

    我这里分享的是将 phpwind8.7 半伪静态转到 DiscuzX3 全伪静态的经验以及相关处理代码(Ngnix 平台)。也就是,保证搜索引擎收录的链接都能 301 到现有 Discuz X3 的伪静态链接上,感兴趣的可以在搜索引擎里 site:groad.net 检验一下。

    首先,在 Discuz 后台将伪静态全部勾选开启。

    再者,修改 Ngnix.conf ,即添加下面代码:
    1. location / {

    2.                 rewrite ^([^\.]*)/topic-(.+)\.html$ $1/portal.php?mod=topic&topic=$2 last;
    3.                 rewrite ^([^\.]*)/article-([0-9]+)-([0-9]+)\.html$ $1/portal.php?mod=view&aid=$2&page=$3 last;

    4.                 rewrite ^([^\.]*)/thread\.php\?fid-([0-9]+)-page-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;

    5.                 rewrite ^([^\.]*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;

    6.                 rewrite ^([^\.]*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;
    7.                 rewrite ^([^\.]*)/group-([0-9]+)-([0-9]+)\.html$ $1/forum.php?mod=group&fid=$2&page=$3 last;
    8.                 rewrite ^([^\.]*)/space-(username|uid)-(.+)\.html$ $1/home.php?mod=space&$2=$3 last;
    9.                 rewrite ^([^\.]*)/blog-([0-9]+)-([0-9]+)\.html$ $1/home.php?mod=space&uid=$2&do=blog&id=$3 last;
    10.                 rewrite ^([^\.]*)/(fid|tid)-([0-9]+)\.html$ $1/index.php?action=$2&value=$3 last;
    11.                 rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last;

    12.                 rewrite ^([^\.]*)/simple/(.*)$ $1/simple/query.php last;

    13.                 if (!-e $request_filename) {
    14.                      return 404;
    15.                 }


    16.                 }
    复制代码
    实际上,如果你是全新安装的 Discuz X ,那么上面这段代码是完全可以实现 Discuz 伪静态了。但是对于 phpwind 的转换,这还不够。由于本站之前用的只是纯论坛,因此搜索引擎收录的链接主要是 read.php ,thread.php,以及无图版的 simple 目录下的链接。因此对这 3 个文件所产生链接的转换就很重要了。

    你先在 Discuz 的网站目录下建立一个 simple 的文件夹,然后把下面压缩包中的 query.php 文件放入其中,它可以帮你转换 phpwind 的无图版到 Discuz 的 Archiver 链接。压缩包中另外两个文件就是 read.php 和 thread.php,将其放在论坛根目录下即可。

    转换文件






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
沙发
 楼主| 发表于 2013-11-23 11:37:12 | 显示全部楼层
cqtnbbs 发表于 2013-11-23 11:16
下载不下载,要铜币,尼玛注册才花了一块钱,直接说好多钱卖就行了,搞的这么麻烦。铜币怎么弄?

铜币登录,回帖发帖都可以有。query.php 放在 simple 目录,其它两个放在根目录。注意将代码中的域名改成你自己的。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
板凳
 楼主| 发表于 2013-11-23 11:56:59 | 显示全部楼层
cqtnbbs 发表于 2013-11-23 11:49
谢谢,thread.php 已经可以用了

我是win iis的环境, Ngnix.conf 这个怎么用?

ngnix.conf 使用的是 ngnix 作为 WEB 服务器。

query.php 是可以用的,注意将代码里面的域名改为你自己的,我这里的是有 /bbs 目录的,你的没有就省略掉。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
地板
 楼主| 发表于 2013-11-23 22:42:02 | 显示全部楼层
cqtnbbs 发表于 2013-11-23 20:26
[mw_shl_code=applescript,true]

# 3600 = 1 hour

我之前的链接形式只有:index.php?t1234.html 或 index.php?f5678.html
所以代码中也只针对这两情况进行了处理,即提取的是 1234 和 5678 这些帖子ID和版块ID的编号。

你这个 t37247_1.html 中含有 _1 这种形式,我不知道是什么,且 DZ 里也没有对应的链接形式,故而会没法处理,并转到首页。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
5#
 楼主| 发表于 2015-6-14 09:37:19 | 显示全部楼层
1000year 发表于 2015-6-13 23:53
如果可以的话通俗一点请教下各位大大

我已经忘了 8.7 动态的链接是啥样了。。你已经升级到 DZ3.2?

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
6#
 楼主| 发表于 2015-6-15 10:55:08 | 显示全部楼层
1000year 发表于 2015-6-14 22:22
如果可以做出read.php和thread.php两个可以301重定向到DZ的文件应该就可以了,可是我现在比较菜鸟,搞不 ...

这个修改不难,比如对着 read.php 里的  $tid_first_page = '/tid-([0-9]+)\.html/i'; 改成 $tid_first_page = '/tid=([0-9]+)/i'; ,这样就能匹配 pw8.7 的链接了。

然后改 preg_match 函数底下的 $tid_one 变量,对应着 DZ3.2 的抄过来即可,比如这里这个帖子:

$tid_one = "forum\.php\?mod=viewthread&tid=$matches[1]" 就可以了

其他收录的链接类似如此。修改的话,可能不会一次成功,多试几次就可以了。最后在百度里访问你被收录的帖子,如果能正确跳转到现在的帖子链接,那就说明修改成功了。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
7#
 楼主| 发表于 2015-6-17 11:20:07 | 显示全部楼层
1000year 发表于 2015-6-16 22:52
我还在测试阶段,没有关闭PW呢,原收录现在还在,打算先测试好了再转。
但是我是菜鸟,所以到各种函数之 ...

我不知道你收录的那些链接都有哪些,比如某个帖子收录的链接为 read.php?tid=xxx,你将下面的内容保存为 read.php ,然后放在 dz 的根目录下即可,
[PHP] 纯文本查看 复制代码
<?php

	$domain = "http://你的网址";

	$request_url = $_SERVER['QUERY_STRING'];


	if (empty($request_url)) {
		header("Location:$domain");
	}

       $tid_first_page = '/tid=([0-9]+)/i';

       if (preg_match($tid_first_page, $request_url, $matches)) {
		
		$tid_one = "forum\.php\?mod=viewthread&tid=$matches[1]"

		header("HTTP/1.1 301 Moved Permanently");
                header("Location:$tid_one");
			
	} 
       else {

		header("Location:http://你的网址");
	}
?>




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-6 04:32 , Processed in 0.073088 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表