伪静态在对于站点来说,一是有利于对搜索引擎 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+))&
amp;page=$2($2 的意思是([0-9]+))&%1(%1 这里就可以忽视了,其它字符串程序就不做处理了。)。
很多情况下,站长做过搬家,调整版块等等,需要做些跳转,也可以通过这个拟静态满足需求。这里就不一而足。