win2008+IIS7.5下Discuz3.2二级目录伪静态配置web.config

Web服务器 欲思 5评论

好久没有用Discuz了。昨天晚上帮一个朋友配置一个二级目录的dz论坛问题。弄了好一会,小记一下。

环境是win2008+IIS7.5。dz的版本是Discuz!X3.2。论坛安装在一个WordPress网站的二级目录。

要是用Apache的就好办一些,因为.htaccess是可以设置子目录的伪静态规则的,但是 在IIS7下,要使用webconfig配置文件来设置伪静态。

win2008+IIS7.5下Discuz3.2二级目录伪静态配置web.config

百度一下也没找到满意的答案。大部分都是说直接复制后台的伪静态规则然后粘贴到根目录,也有说粘贴到二级目录的。甚至还有说iis7用 http.ini 文件的。

后来在万网帮助里面找到一个有用的信息。说万网的轻云服务器伪静态组件和别的服务器不一样,需要自己编写规则。

自己折腾的过程其实特别麻烦,特别容易出错。就不多说了。直接贴上 web.config 配置文件代码吧。

系统默认的伪静态规则是这么写的:

<rule name="portal_topic">
	<match url="^(.*/)*topic-(.+).html\?*(.*)$" />
	<action type="Rewrite" url="{R:1}/portal.php\?mod=topic&amp;topic={R:2}&amp;{R:3}" />
</rule>

那么二级目录(根目录下/bbs)就修改为

<rule name="portal_topic">
	<match url="^(.*/)*bbs/topic-(.+).html\?*(.*)$" />
	<action type="Rewrite" url="{R:1}/bbs/portal.php\?mod=topic&amp;topic={R:2}&amp;{R:3}" />
</rule>

其实就是在topic这个是系统的文件目录前面加上一个你的二级目录文件夹路径bbs/(其他的改成自己相应的文件夹名即可),其他论坛文件目录的伪静态规则修改以此类推。

因为根目录下一句安装了一个WordPress网站。所以根目录下的配置文件会有WordPress的伪静态规则。

<rule name="wordpress" patternSyntax="Wildcard">
 <match url="*"/>
 <conditions>
 <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
 <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
 </conditions>
 <action type="Rewrite" url="index.php"/>
 </rule>

我使用的时候在WordPress规则下面继续添加rule的时候连根目录的WordPress网站都不能打开,一直报各种错误。暂时还不知道这个是什么原因。

但是调整dz的rule顺序,把规则写在WordPress规则上面的时候。根目录网站正常访问了,也实现了二级目录的dz论坛伪静态功能(前提是已经在dz论坛后台开启了相关的伪静态设置,并且配置好了url路径和所在的应用域名路径)。

我这边使用的时候论坛帖子内容页老是报错说“插件不存在或已关闭”。这个可能原因应该是配置forum_viewthread出现了一些错误。所以自己写的时候请不要出错。

这边给大家提供一个二级目录文件夹为bbs下的论坛伪静态规则配置文件:

 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
 <rewrite>
 <rules>
<rule name="portal_topic">
 <match url="^(.*/)*bbs/topic-(.+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/portal.php\?mod=topic&amp;topic={R:2}&amp;{R:3}" />
 </rule>
 <rule name="portal_article">
 <match url="^(.*/)*bbs/article-([0-9]+)-([0-9]+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/portal.php\?mod=view&amp;aid={R:2}&amp;page={R:3}&amp;{R:4}" />
 </rule>
 <rule name="forum_viewthread">
 <match url="^(.*/)*bbs/thread-([0-9]+)-([0-9]+)-([0-9]+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/forum.php\?mod=viewthread&amp;tid={R:2}&amp;extra=page%3D{R:4}&amp;page={R:3}&amp;{R:5}" />
 </rule>
 <rule name="forum_forumdisplay">
 <match url="^(.*/)*bbs/forum-(\w+)-([0-9]+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/forum.php\?mod=forumdisplay&amp;fid={R:2}&amp;page={R:3}&amp;{R:4}" />
 </rule>
 <rule name="group_group">
 <match url="^(.*/)*bbs/group-([0-9]+)-([0-9]+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/forum.php\?mod=group&amp;fid={R:2}&amp;page={R:3}&amp;{R:4}" />
 </rule>
 <rule name="home_space">
 <match url="^(.*/)*bbs/space-(username|uid)-(.+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/home.php\?mod=space&amp;{R:2}={R:3}&amp;{R:4}" />
 </rule>
 <rule name="home_blog">
 <match url="^(.*/)*bbs/blog-([0-9]+)-([0-9]+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/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="^(.*/)*bbs/(fid|tid)-([0-9]+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/index.php\?action={R:2}&amp;value={R:3}&amp;{R:4}" />
 </rule>
 <rule name="plugin">
 <match url="^(.*/)*bbs/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+).html\?*(.*)$" />
 <action type="Rewrite" url="{R:1}/bbs/plugin.php\?id={R:2}:{R:3}&amp;{R:4}" />
 </rule>
 <rule name="wordpress" patternSyntax="Wildcard">
 <match url="*"/>
 <conditions>
 <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
 <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
 </conditions>
 <action type="Rewrite" url="index.php"/>
 </rule></rules>
 </rewrite>
 </system.webServer>
</configuration>

复制粘贴到web.config,再上传到根目录即可。具体文件名替换bbs即可。根目录其他网站程序的规则继续添加在dz伪静态规则下面。记得将配置文件 web.config文件放在根目录 。而且要删除掉二级目录网站下的web.config文件。

顺便附上dz3.2去除forum.php方法

Discuz论坛什么都好就有一点就是有很多页面附带了forum.php这个尾巴,这个forum.php尾巴所带来的坏处是对SEO不友好,所以大部分站长都会修改代码删除掉这个forum.php。

Discuz官方论坛有很多类似的删除forum.php教程,大部分好像不是特别管用。有些按照他们的方法去是可以去掉,但是会造成某些页面不能伪静态。

下面分享一个可用的办法。如果有不对的地方请指教。修改代码前请备份好要修改的文件。

1、去除导航栏的forum.php

打开后台–全局–域名设置–应用域名,在默认这里填写论坛的域名。

进入后台–界面–主导航,在这里创建一个代替默认导航的名称(可自定义设置),链接地址那里填写“/”即可。

进入你的空间或者主机把forum.php添加进默认内容文档,然后把forum.php移到第一位(找不到主页文件首页会出现404)。

2、搜索下面导航的forum.php

打开template\你所用的模板文件夹名\forum\discuz.htm 然后搜索如下代码:

<a href="forum.php"{if $_G['setting']['forumjump']} id="fjump" class="showmenu"{/if}>{$_G[setting][navs][2][navname]}</a>

把其中的forum.php改为./然后保存,这样首页搜索下面的forum.php尾巴就去掉了

 3、分区那里和版块主图列表导航的forum.php

打开template\你所用的模板文件夹名\forum\forumdisplay.htm然后搜索如下代码:

<a href="forum.php"{if $_G['setting']['forumjump']} id="fjump" class="showmenu" {/if}>{$_G[setting][navs][2][navname]}</a>

<a href="forum.php">{lang return_index}</a>

把其中的forum.php改为./ 这样分区与版块主题列表下面的forum.php 尾巴就彻底去掉了

4、帖子内容页的forum.php

打开template\你所用的模板文件夹名\forum\viewthread.htm然后搜索如下代码:

<a href="forum.php" class="nvhm" title="{lang homepage}">

把其中的forum.php改为./ 这样帖子内容页的forum.php尾巴就彻底去掉了

把上述的forum.php去掉以后,全论坛就看不到forum.php了。有些其它地方的forum.php可能没去掉,因为可能会导致一些页面不能伪静态。

其实只要你的网站开启了伪静态只需要在robots文件里面加入

Disallow: /?*

搜索引擎就不会收录你站点的动态页面,这样就不会造成动态与静态都收录的问题,所以只需要去掉一些对SEO有用而不会造成问题的的forum.php即可。

转载请注明:欲思博客 » win2008+IIS7.5下Discuz3.2二级目录伪静态配置web.config

如果你觉得这篇文章或者我分享的主题对你有帮助,请支持我继续更新网站和主题 !捐赠本站
喜欢 (8)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(5)个小伙伴在吐槽
  1. 经测试以上方法不适用于IIS7.5二级目录伪静态,会出现500错误。后面自己研究出来只要把默认的伪静态规则添加到根目录下的web.config文件里面就可以了。
    正子2016-03-16 01:48 回复
  2. 能不能帮我看下,我的主站是sdcms做的,二级目录是dd。按照你的方法,报错500.19.配置无效
    独独2014-11-26 16:58 回复
  3. 我的也是二级目录做discuz 3.2的BBS 但是根据你的伪静态规则放上去 还是没用 还是跳404 不知道为什么 我的是IIS8.0
    律法网2014-09-26 14:02 回复
    • 哦。8.0下还没测试过。
      欲思2014-09-26 14:53 回复
      • 我的也是,找了很多资料,都没有办法解决这个问题,,期待能解决,,
        特产吧2014-12-01 13:01 回复