Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

Discuz!X2伪静态规则简介

[复制链接]
vinsonwang 发表于 2011-8-31 16:56:09 | 显示全部楼层 |阅读模式
本帖最后由 vinsonwang 于 2011-8-31 16:58 编辑

*************************************************
** 本教程基于版本:Discuz! X 2.0               **
*************************************************
伪静态在对于站点来说,一是有利于对搜索引擎SEO优化,尤其是站点经过多次调整,部分URL已经失效,再一个可以把对外的URL进行规范化,也利于站点的安全。
Discuz! X2后台 SEO 设置中,只需站长选择要进行拟静态的项目,然后查看对应规则,添加到服务器即可,很方便。但有些站长对默认规则不太满足,还需进行优化,修改。那么,就Discuz! X2的伪静态规则进行一下讲解,本例基于Apache的,其它版本再续。
首先看看Discuz! X2全部项目的拟静态规则,拿虚拟主机举例:
  1. # 将 RewriteEngine 模式打开
  2. RewriteEngine On

  3. # 修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /
  4. RewriteBase /discuz

  5. # Rewrite 系统规则请勿修改
  6. RewriteCond %{QUERY_STRING} ^(.*)$
  7. RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1&%1
  8. RewriteCond %{QUERY_STRING} ^(.*)$
  9. RewriteRule ^article-([0-9]+)-([0-9]+)\.html$ portal.php?mod=view&aid=$1&page=$2&%1
  10. RewriteCond %{QUERY_STRING} ^(.*)$
  11. RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
  12. RewriteCond %{QUERY_STRING} ^(.*)$
  13. RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2&%1
  14. RewriteCond %{QUERY_STRING} ^(.*)$
  15. RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2&%1
  16. RewriteCond %{QUERY_STRING} ^(.*)$
  17. RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2&%1
  18. RewriteCond %{QUERY_STRING} ^(.*)$
  19. RewriteRule ^blog-([0-9]+)-([0-9]+)\.html$ home.php?mod=space&uid=$1&do=blog&id=$2&%1
  20. RewriteCond %{QUERY_STRING} ^(.*)$
  21. RewriteRule ^archiver/(fid|tid)-([0-9]+)\.html$ archiver/index.php?action=$1&value=$2&%1
复制代码
RewriteEngine On这个是必须的,开启状态。
修改以下语句中的 /discuz 为你的论坛目录地址,如果程序放在根目录中,请将 /discuz 修改为 /。
这句话很多人不太理解,它的意思就是说,虚拟主机往往根目录不是对外能直接访问的,如果你站点是装在类似/discuz/这样的目录下,那么,/discuz就改成你安装站点的目录,如/www、/wwwrooot,如果是直接安装在根目录了,那就去掉discuz,只留个/。
以下的语句,我们发现,只有两种:
RewriteCond
RewriteRule
RewriteCond 是重写条件,它符合条件了,就执行RewriteRule ,即重写规则。
它俩的区别在于,RewriteCond是字符串在前面,正则表达式在后面,而RewriteRule正则表达式在前,字符串在后。
手册中的解释:
RewriteRule 为重写引擎定义重写规则,语法,RewriteRule Pattern Substitution [flags]
RewriteRule指令是重写引擎的根本。此指令可以多次使用。每个指令定义一个简单的重写规则。这些规则的定义顺序尤为重要——在运行时,规则是按这个顺序逐一生效的。
[url=]Pattern[/url]是一个作用于当前URL的perl兼容的[url=]正则表达式[/url]。"当前URL"是指该规则生效时刻的URL的值。它可能与被请求的URL截然不同,因为其他规则可能在此之前已经发生匹配并对它做了改动。
重写规则中的[url=]Substitution[/url]是当原始URL与Pattern相匹配时,用来替代(或替换)的字符串。
简单点说,Pattern就是参数,一般为一些文件的扩展名,Substitution是用来替换前面用的。
举例说明:
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
请求的字符串%{QUERY_STRING}为任意^(.*)$时,执行RewriteRule,当来访地址为^forum-(\w+)-([0-9]+)\.html$这样的地址,也就是forum-(数字、字母、下划线)-(数字).html这样的地址,则Apache把它解析为forum.php?mod=forumdisplay&fid=$1&page=$2&%1也就是forum.php?mod=forumdisplay&fid=$1($1的意思是前面的(\w+))&page=$2($2的意思是([0-9]+))&%1(%1这里就可以忽视了,其它字符串程序就不做处理了。)。
很多情况下,站长做过搬家,调整版块等等,需要做些跳转,也可以通过这个拟静态满足需求。这里就不一而足。
nxy105 发表于 2011-9-1 10:09:21 | 显示全部楼层
沙发!!!
回复

使用道具 举报

linmaoyuan 发表于 2011-9-1 10:46:22 | 显示全部楼层
看不懂!!!
回复

使用道具 举报

刃真刃真 发表于 2011-9-1 14:38:03 | 显示全部楼层
我恐惧代码
回复

使用道具 举报

枫叶飘丹 发表于 2011-9-1 15:09:30 | 显示全部楼层
这个资料挂好挂好的`~`































































































严重支持·
回复

使用道具 举报

2800 发表于 2011-9-1 17:11:34 | 显示全部楼层
支持
回复

使用道具 举报

habayy 发表于 2011-9-1 17:22:23 | 显示全部楼层
支持
回复

使用道具 举报

szwhd 发表于 2011-9-1 17:29:31 | 显示全部楼层
支持下!
回复

使用道具 举报

eqmz 发表于 2011-9-2 12:20:31 | 显示全部楼层
学习一下。。
回复

使用道具 举报

blt520 发表于 2011-9-13 11:14:33 | 显示全部楼层
门户首页的文章还是无法静态 用了规则 还是直接跳转到收了啊 谢谢帮忙看看  http://www.hg361.com/article-9-1.html
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-23 21:51 , Processed in 0.066161 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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