Discuz!X2伪静态规则简介

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

# 将 RewriteEngine 模式打开
RewriteEngine On

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

# Rewrite 系统规则请勿修改
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^topic-(.+)\.html$ portal.php?mod=topic&topic=$1&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^article-([0-9]+)-([0-9]+)\.html$ portal.php?mod=view&aid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^forum-(\w+)-([0-9]+)\.html$ forum.php?mod=forumdisplay&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ forum.php?mod=viewthread&tid=$1&extra=page\%3D$3&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^group-([0-9]+)-([0-9]+)\.html$ forum.php?mod=group&fid=$1&page=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^blog-([0-9]+)-([0-9]+)\.html$ home.php?mod=space&uid=$1&do=blog&id=$2&%1
RewriteCond %{QUERY_STRING} ^(.*)$
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这里就可以忽视了,其它字符串程序就不做处理了。)。
很多情况下,站长做过搬家,调整版块等等,需要做些跳转,也可以通过这个拟静态满足需求。这里就不一而足。

Comments

No comments yet. Why don’t you start the discussion?

发表回复