大家都知道,在PW转换到DZ后,帖子等链接会发生变化,这就导致了百度以前收录的页面用户访问会打不开的情况,如果一个收录几十万页面的论坛遇到这个情况是很尴尬的,而且等百度重新收录新地址估计需要挺长的一段时间,所以,如何从老地址跳转到相应的新地址就很重要了,因为偶是小菜,昨天我找了一天都没解决,今天中午终于把它弄好了,下面分享一下。

有几个相关的帖子大家可以参考下:

【phpwind=>Discuz!X 部分 rewrite 规则】

【phpwind8.7转换成功X2.5 保持原伪静态链接】

由于我论坛的环境和以上两个不同,所以一直没成功。。。

以下是我在IIS7环境下成功的:

[cce_xml]
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<system.web>
		<compilation debug="true" />
		<customErrors mode="Off" />
  	</system.web>
    <system.webServer>
        <defaultDocument>
            <files>
                <add value="forum.php" />
            </files>
        </defaultDocument>
        <rewrite>
        	<rules>
                <clear />
                <rule name="已导入的规则 1">
                    <match url="^thread-htm-fid-([0-9]+)\.html$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="forum.php?mod=forumdisplay&amp;fid={R:1}" appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 2">
                    <match url="^read-htm-tid-([0-9]+)\.html$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="forum.php?mod=viewthread&amp;tid={R:1}" appendQueryString="false" />
                </rule>
                <rule name="已导入的规则 3">
                    <match url="^(.*)-htm-(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}.php?{R:2}" appendQueryString="false" />
                </rule>
                <rule name="portal_topic">
                    <match url="^(.*/)*topic-(.+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/portal.php\?mod=topic&amp;topic={R:2}&amp;{R:3}" />
                </rule>
                <rule name="portal_article">
                    <match url="^(.*/)*article-([0-9]+)-([0-9]+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/portal.php\?mod=view&amp;aid={R:2}&amp;page={R:3}&amp;{R:4}" />
                </rule>
                <rule name="forum_forumdisplay">
                    <match url="^(.*/)*forum-(\w+)-([0-9]+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/forum.php\?mod=forumdisplay&amp;fid={R:2}&amp;page={R:3}&amp;{R:4}" />
                </rule>
                <rule name="forum_viewthread">
                    <match url="^(.*/)*thread-([0-9]+)-([0-9]+)-([0-9]+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/forum.php\?mod=viewthread&amp;tid={R:2}&amp;extra=page%3D{R:4}&amp;page={R:3}&amp;{R:5}" />
                </rule>
                <rule name="group_group">
                    <match url="^(.*/)*group-([0-9]+)-([0-9]+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/forum.php\?mod=group&amp;fid={R:2}&amp;page={R:3}&amp;{R:4}" />
                </rule>
                <rule name="home_space">
                    <match url="^(.*/)*space-(username|uid)-(.+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/home.php\?mod=space&amp;{R:2}={R:3}&amp;{R:4}" />
                </rule>
                <rule name="home_blog">
                    <match url="^(.*/)*blog-([0-9]+)-([0-9]+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/home.php\?mod=space&amp;uid={R:2}&amp;do=blog&amp;id={R:3}&amp;{R:4}" />
                </rule>
                <rule name="forum_archiver">
                    <match url="^(.*/)*(fid|tid)-([0-9]+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/index.php\?action={R:2}&amp;value={R:3}&amp;{R:4}" />
                </rule>
                <rule name="plugin">
                    <match url="^(.*/)*([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+).html\?*(.*)$" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="{R:1}/plugin.php\?id={R:2}:{R:3}&amp;{R:4}" />
                </rule>
        	</rules>
            <rewriteMaps>
                <rewriteMap name="^(.*/)*read-htm-tid-([0-9]+).html$" />
            </rewriteMaps>
        </rewrite>
    </system.webServer>
</configuration>
[/cce_xml]

其中【已导入的规则】那三条就是针对于PW的帖子和版块链接转到DZ帖子和版块链接用的,其他的规则就是官方默认的,IIS7下的伪静态是修改web.config文件的,最后尤其重要的一点,貌似规则有优先顺序的?导入的那三条最好放在最上面!!否则有可能不起作用。

论坛最重要的链接应该就是帖子和版块了吧,其他模块的链接转换我还没捣鼓,因为链接也不多,希望已经捣鼓出来的同学回帖提示我一下,共享一下撒~注意哦,我希望是在IIS7环境下的~