效果介绍:
同一个页面可以由多个静态地址访问,比如在论坛帖子列表中,tid=1的帖子,可能会显示thead-1-1.html的访问地址,也可能是yahoo-thread-1-1.html,更多地址都可以,只要你设定你的随机种子。
参考网站:深圳科技园在线
本文目的:通过随机静态化,可实时在url中含有一些你感兴趣的关键字,url中包含的关键字的作用可体现在:seo排名,adsense广告等。本文只介绍技术实现,不涉及具体功能和风险分析,使用本方法请慎重。
discuz中如何实现静态化的?
discuz论坛已经可以通过url重写(iis添加API:Rewrite.dll),分别实现归档、论坛、帖子、个人信息、空间、标签(discuz6.0以上)的静态化。
在静态化规则中实现:
RewriteRule
^
(.
*
)
/
archiver
/
([a
-
z0
-
9
-
]
+
.html)$ $
1
/
archiver
/
index.php
?
$
2
RewriteRule
^
(.
*
)
/
forum
-
([
0
-
9
]
+
)
-
([
0
-
9
]
+
).html$ $
1
/
forumdisplay.php
?
fid
=
$
2
&
page
=
$
3
RewriteRule
^
(.
*
)
/
thread
-
([
0
-
9
]
+
)
-
([
0
-
9
]
+
)
-
([
0
-
9
]
+
).html$ $
1
/
viewthread.php
?
tid
=
$
2
&
extra
=
page
%
3D$
4
&
page
=
$
3
RewriteRule
^
(.
*
)
/
profile
-
(username
|
uid)
-
(.
+
).html$ $
1
/
viewpro.php
?
$
2
=
$
3
RewriteRule
^
(.
*
)
/
space
-
(username
|
uid)
-
(.
+
).html$ $
1
/
space.php
?
$
2
=
$
3
RewriteRule
^
(.
*
)
/
tag
-
([A
-
Za
-
z0
-
9
%
]
+
).html$ $
1
/
tag.php
?
name
=
$
2
实现举例:
tag.php?name=[tagname] => tag-[tagname].html
forumdisplay.php?fid=[fid]&page=[page] =>forum-[fid]-[page].html
viewthread.php?tid=[tid]&extra=page#[reply]&page=[page] =>thread-[tid]-[page]-[reply].html
并在include/global.func.php 文件中通过正则替换将动态链接地址转为静态链接地址。
function
rewrite_thread(
$tid
,
$page
=
0
,
$prevpage
=
0
,
$extra
=
''
) {
return
'
<a href="
'
.
$tid
.
'
-
'
.
(
$page
?
$page
:
1
)
.
'
-
'
.
(
$prevpage
&&
!
IS_ROBOT
?
$prevpage
:
1
)
.
'
.html"
'
.
stripslashes
(
$extra
)
.
'
>
'
;
}

function
rewrite_forum(
$fid
,
$page
=
0
,
$extra
=
''
) {
return
'
<a href="forum-
'
.
$fid
.
'
-
'
.
(
$page
?
$page
:
1
)
.
'
.html"
'
.
stripslashes
(
$extra
)
.
'
>
'
;
}

function
rewrite_space(
$uid
,
$username
,
$extra
=
''
) {
$GLOBALS
[
'
rewritecompatible
'
]
&&
$username
=
rawurlencode
(
$username
);
return
'
<a href="space-
'
.
(
$uid
?
'
uid-
'
.
$uid
:
'
username-
'
.
$username
)
.
'
.html"
'
.
stripslashes
(
$extra
)
.
'
>
'
;
}

function
rewrite_tag(
$name
,
$extra
=
''
) {
$GLOBALS
[
'
rewritecompatible
'
]
&&
$name
=
rawurlencode
(
$name
);
return
'
<a href="
'
.
$name
.
'
.
'
.
rawurldecode
(
$name
)
.
'
.html"
'
.
stripslashes
(
$extra
)
.
'
>
'
;
}
三步实现随机静态化的方法(仅以tag和thread为例子):
1 在url重写规则中,将tag,thread的规则写为:
RewriteRule
^
(.
*
)
/
(.*
)thread
-
([
0
-
9
]
+
)
-
([
0
-
9
]
+
)
-
([
0
-
9
]
+
).(.
*
)html$ $
1
/
viewthread.php
?
tid
=
$
3
&
extra
=
page
%
3D$
4
&
page
=
$
4
RewriteRule
^
(.
*
)
/
(.*
)tag
-
([A
-
Za
-
z0
-
9
%
]
+
).(.
*
)html$ $
1
/
tag.php
?
name
=
$
3
2 在include/global.func.php 文件中添加seo_rand_str()函数:
function
seo_rand_str(){
$string
[
1
]
=
'
shenzhen
'
;
$string
[
2
]
=
'
hongkong
'
;
$string
[
3
]
=
'domains-
yahoo
'
;
$string
[
4
]
=
'beauty
'
;
return
$string
[
rand
(
1
,
4
)];
}
这里只列出了4个随机种子示范,可根据实际情况修改或增加(不要太多了)。
注意:随机字符串不要包含中文,最好是标准域名格式(英文字母,-,数字)。
3修改rewrite_thread和rewrite_tag函数为
function
rewrite_thread(
$tid
,
$page
=
0
,
$prevpage
=
0
,
$extra
=
''
) {
return
'
<a href="
'.seo_rand_str().'
-thread-
'
.
$tid
.
'
-
'
.
(
$page
?
$page
:
1
)
.
'
-
'
.
(
$prevpage
&&
!
IS_ROBOT
?
$prevpage
:
1
)
.
'
.html"
'
.
stripslashes
(
$extra
)
.
'
>
'
;
}

function
rewrite_tag(
$name
,
$extra
=
''
) {
$GLOBALS
[
'
rewritecompatible
'
]
&&
$name
=
rawurlencode
(
$name
);
return
'
<a href="
'.seo_rand_str().'
-tag-
'
.
$name
.
'
.html"
'
.
stripslashes
(
$extra
)
.
'
>
'
;
}