曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 34340|回复: 25
打印 上一主题 下一主题

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

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 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

0

主题

15

帖子

38

积分

初学弟子

积分
38
26#
发表于 2015-7-10 19:12:58 | 只看该作者
beyes 发表于 2015-6-17 11:20
我不知道你收录的那些链接都有哪些,比如某个帖子收录的链接为 read.php?tid=xxx,你将下面的内容保存为  ...

大神帮帮忙呀,都到这份上了,帮解决一下万谢!

0

主题

15

帖子

38

积分

初学弟子

积分
38
25#
发表于 2015-7-10 19:12:34 | 只看该作者
beyes 发表于 2015-6-17 11:20
我不知道你收录的那些链接都有哪些,比如某个帖子收录的链接为 read.php?tid=xxx,你将下面的内容保存为  ...

用那个做read.php后,进入read.php?tid=xxx的时候会提示这个
Parse error: syntax error, unexpected T_STRING in C:\dz\read.php on line 18

0

主题

15

帖子

38

积分

初学弟子

积分
38
24#
发表于 2015-6-23 12:07:56 | 只看该作者
beyes 发表于 2015-6-17 11:20
我不知道你收录的那些链接都有哪些,比如某个帖子收录的链接为 read.php?tid=xxx,你将下面的内容保存为  ...

好像不行,我再试试看。
我的PW收录是  域名/read.php?tid=xxx
其中xxx大概是1-6000之间。

0

主题

15

帖子

38

积分

初学弟子

积分
38
23#
发表于 2015-6-23 11:59:47 | 只看该作者
beyes 发表于 2015-6-17 11:20
我不知道你收录的那些链接都有哪些,比如某个帖子收录的链接为 read.php?tid=xxx,你将下面的内容保存为  ...

好的谢谢大神我先试试

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
22#
 楼主| 发表于 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://你的网址");
	}
?>




0

主题

15

帖子

38

积分

初学弟子

积分
38
21#
发表于 2015-6-16 22:52:19 | 只看该作者
beyes 发表于 2015-6-15 10:55
这个修改不难,比如对着 read.php 里的  $tid_first_page = '/tid-([0-9]+)\.html/i'; 改成 $tid_first_p ...

我还在测试阶段,没有关闭PW呢,原收录现在还在,打算先测试好了再转。
但是我是菜鸟,所以到各种函数之类的就搞不来了,悲了个催的。。。。
大神能否帮我改改好,就直接让类似read.php?tid=123直接301跳转到DZ的默认编号为123的贴子下就行。
先谢谢大神啦

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
20#
 楼主| 发表于 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]" 就可以了

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

0

主题

15

帖子

38

积分

初学弟子

积分
38
19#
发表于 2015-6-14 22:22:34 | 只看该作者
1000year 发表于 2015-6-14 22:21
然后版块的链接似乎是域名/thread.php?fid=xxx

如果可以做出read.php和thread.php两个可以301重定向到DZ的文件应该就可以了,可是我现在比较菜鸟,搞不定这一步,求大神帮忙

0

主题

15

帖子

38

积分

初学弟子

积分
38
18#
发表于 2015-6-14 22:21:41 | 只看该作者
1000year 发表于 2015-6-14 22:21
8.7的动态链接是 域名/read.php?tid=xxx这个样子

然后版块的链接似乎是域名/thread.php?fid=xxx
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-18 03:24 , Processed in 0.074884 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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