前几天帮人实现 Discuz X2 的子目录伪静态,以前没做过,就去查了下百度和 Discuz 论坛,发现好多人都在找这样的伪静态方法,可是都没真正能解决的方法。
Discuz
X2 现在用的人还是比较多的,我不知道有多少人用的是 IIS7 的,用 Apache 的就好办一些,因为.hacess 是可以设置子目录的伪静态规则的,但是
在 IIS7 下,webconfig 究竟怎么放才能实现子目录伪静态没有试过,我百度的时候还有人说 IIS7 是 Discuz X2 的非主流环境。
下面我就说一下在 IIS7 下如何实现 Discuz X2 的子目录伪静态。
首先说明一下,在 IIS7 下我们自己测试的时候之所以不能实现,大部分是因为我们把伪静态的文件放在子目录了,造成主目录的规则跟子目录相互冲突。
还有一些是在子目录消除了主目录的伪静态继承,但是依旧打不开。
我通过多次测试发现,IIS7 下的子目录伪静态,规则要放在主目录,而且规则的写法不能跟主目录的规则冲突。我这里就不说那么多理论了。直接发规则:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WWW 301Redirect" stopProcessing="true"> // 301 跳转规则
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^domain.comg$" />
</conditions>
<action type="Redirect" url="http://www.domain.com/R:0" redirectType="Permanent" />
</rule><rule name="portal_topic"> // 论坛规则开始
<match url="http://(.*)/topic-(.+).html?*(.*)$" />
<action type="Rewrite" url="" />
</rule>
<rule name="portal_article">
<match url="http://(.*)/article-(%5B0-9%5D+)-(%5B0-9%5D+).html?*(.*)$" />
<action type="Rewrite" url="" />
</rule>
<rule name="forum_forumdisplay">
<match url="http://(.*)/forum-(w+)-(%5B0-9%5D+).html?*(.*)$" />
<action type="Rewrite" url="" />
</rule>
<rule name="forum_viewthread">
<match url="http://(.*)/thread-(%5B0-9%5D+)-(%5B0-9%5D+)-(%5B0-9%5D+).html?*(.*)$" />
<action
type="Rewrite"
url="{R:1}/forum.php?mod=viewthread&tid={R:2}&extra=page%3D{R:4}&page={R:3}&{R:5}"
/>
</rule>
<rule name="group_group">
<match url="http://(.*)/group-(%5B0-9%5D+)-(%5B0-9%5D+).html?*(.*)$" />
<action type="Rewrite" url="" />
</rule>
<rule name="home_space">
<match url="http://(.*)/space-(username|uid)-(.+).html?*(.*)$" />
<action type="Rewrite" url="" />
</rule>
<rule name="home_blog">
<match url="http://(.*)/blog-(%5B0-9%5D+)-(%5B0-9%5D+).html?*(.*)$" />
<action type="Rewrite" url="" />
</rule>
<rule name="forum_archiver">
<match url="http://(.*)/(fid|tid)-(%5B0-9%5D+).html?*(.*)$" />
<action type="Rewrite" url="" />
</rule> //论坛规则结束
<rule name="wordpress" patternSyntax="Wildcard"> // WP 伪静态规则开始
<match url="*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/bbs1" negate="true" /></conditions>
<action type="Rewrite" url="index.php" />
</rule></rules>
</rewrite>
</system.webServer>
</configuration>
基本上这个规则的子目录已经确定是 bbs 了,实在不会的朋友直接抄袭吧。