云服务器促销,免费安装宝塔面板!
开启左侧

[DZ教程] discuz x3.4论坛怎么实现全站伪静态化?

[复制链接]
图片素材 发表于 2017-8-30 00:16:59 | 显示全部楼层 |阅读模式

本站会员必须 邮箱验证成功后 才能发帖。马上注册查阅更多教程,下载海量资源,让你轻松玩做站

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
$ {( j* B+ M( w( }+ O* [

* W& u0 K( g% C' ldiscuz官方虽然自带伪静态设置 但还是有些地方做的并不完善,今天就教大家几个常用的解决方法。4 h8 j- U- c1 @; b

" a9 o. B# I: `( w3 O" S一、discuz x3论坛首页“最后发表”帖子链接静态化   D, s! }0 d2 @# e2 v+ m# W
( ?8 m& G7 w$ @' g1 @, B2 r
现在还没有找到完美的解决方法,不过通过这样做还是基本实现我想要的形式,有两种方法,各有各的不足。
: T3 n/ p" I, x  k8 A方法1、把  /source/module/forum/ 下的forum_redirect.php
2 P! y) i! K5 i- ~' J( e
  1. dheader(‘Location: forum.php?mod=viewthread&tid=’.$_G['tid'].$pageadd.’#lastpost’);
复制代码
- M% d; |2 ]/ g4 v2 W7 E

! P" f  }, x9 C9 z. |) {) d# m  `0 a- y5 B' ]; P2 e0 a$ I
换成# O, k& x! ~+ u( C* h& \
  1. header("HTTP/1.1 301 Moved Permanently");
    ; C3 \  D: m( V- E2 h# M1 J
  2. dheader(‘Location:thread-’.$_G['tid'].’-’.$page.’-1.html#lastpost’);
复制代码

+ j' R( |& Z( f5 W3 w7 X; n' v7 ]3 }( o$ K* q% |) y# Z7 N" Y
虽然首页显示是动态地址,但是点击就会301跳转到静态页,这个方法是定死的,取消了伪静态设置还是会跳转到这个伪静态地址,所以一定开启了伪静态而且必须是系统默认的方式,才可以这样修改。" m- k) j1 Z* \1 l3 V- J7 D. V
方法2、这个方法是直接修改模板discuz.htm中的 2 ?7 _4 P9 `2 E* k
  1. forum.php?mod=redirect&tid=$forum[lastpost][tid]&goto=lastpost#lastpost
复制代码

3 }% M( G5 W' `4 B9 }. y9 w% m( m! ^
换成
9 v! I( S* N# h6 W
  1. forum.php?mod=viewthread&tid=$forum[lastpost][tid]
复制代码

" ?/ Y: h  Y" |: g5 M
/ ]8 q/ G! h' r. g+ ?一共有三处这个方法可是完美支持自动判断网站是伪静态还是动态,不足之处是点击不会跳转到最后回复的帖子,只会跳转到最后回复的主题。 $ q1 T- R+ O0 w/ M. Z3 X

) z% \/ J/ X  q8 Y9 j( J/ A, B: F2 m3 D9 h" Z# Z
二、discuz X3“上一主题、下一主题”链接静态化
7 i  |0 B* A9 W! {
" Y, `; B+ h/ X: g利用$_G[tid]-1 和 $_G[tid]+1 来做连接 打开viewthread.htm文件
1 }( L/ B- e2 L7 `2 @1 y+ ^  ?
- ]3 u) @+ \  y' n查找 - N/ n1 U/ D1 s1 H; B
  1. <a href="forum.php?mod=redirect&goto=nextoldset&tid=$_G[tid]" title="{lang last_thread}"><img src="{IMGDIR}/thread-prev.png" alt="{lang last_thread}" class="vm" /></a>
    # ], h" l! k2 j6 p% @
  2. <a href="forum.php?mod=redirect&goto=nextnewset&tid=$_G[tid]" title="{lang next_thread}"><img src="{IMGDIR}/thread-next.png" alt="{lang next_thread}" class="vm" /></a>7 i* o" t  B# B1 _4 L
复制代码

8 w+ _$ @# f& l; ^8 \! }* {: {; O9 L改为* n+ Z" c& F; o. ]  b! W9 m3 A
  1. <!–{eval $up_thread=$_G[tid]-1;$down_thread=$_G[tid]+1;}–>
    ; M1 z& g8 z' i5 ]
  2. <a href="thread-$up_thread-1-1.html" rel="nofollow" title="{lang last_thread}"><img src="{IMGDIR}/thread-prev.png" alt="{lang last_thread}" class="vm" /></a> ; ~$ p# `/ F5 p
  3. <a href="thread-$down_thread-1-1.html" rel="nofollow" title="{lang next_thread}"><img src="{IMGDIR}/thread-next.png" alt="{lang next_thread}" class="vm" /></a>
复制代码
  ?4 M+ v" |4 X/ L
7 {" `  T1 |5 `* i$ Z2 j* T
注意:用这种方法如果主题被删除就找不到了。(但是已经能完全实现伪静态了)6 T& B( X7 T- r9 w* d0 A

5 e1 V/ l4 C% \) m* v6 B7 }三、Discuz X3.0论坛帖“复制链接”伪静态实现方法
* b6 G) v# e4 Y* J( r# O9 Q* W
3 e" A' a: x3 c" e3 e打开 /template/default/forum/viewthread.htm 在大约200行左右找到以下代码: % f: \; x8 p4 @1 k, |; i# a
  1. forum.php?mod=viewthread&tid=$_G[tid]$fromuid
复制代码

9 e% K7 o# H& T# z2 {( a8 Z
+ H% V2 H# v& `% H4 J换成 ; S$ y7 O. ?4 X* i* P$ H5 F7 p; X; G( m
  1. forum.php?mod=viewthread&tid=$_G[tid]
复制代码
& n/ V, f, G6 `  H, T

& B- O+ z9 Y6 H& N# V7 l就可以了。9 V* ]! Z. }4 h) P

! B0 A+ L, O+ |, |' F( F0 h四、discuz X3帖子列表页默认打开修改为新窗口打开
3 {! \( g, n" j; ~; Ldiscuz X3帖子列表默认打开是本窗口打开的,不符合用户使用习惯,最正规的修改如下面两个步骤: ' N0 \* p% ~7 I$ w( w& |! o  x  N
1: 根目录/static/js/forum.js 1 S4 w1 D/ ?: h
找到 atarget函数
% H) }7 x- n0 P改成
8 h( L* q1 `4 ?! r) z% V
  1. function atarget(obj) {
    / \* Z* F4 D2 O/ x
  2. obj.target = getcookie(‘atarget’) ?  ”: ‘_blank’; - A; U. c( u( ]
  3. }& V( e  w8 m6 f! K- e
复制代码

  g  A1 @$ _$ L8 ?2:把‘打开新窗口’改成‘本窗口打开’ 修改如下:
, Z0 U3 d* S% F# H# D根目录/template/default/forum/forumdisplay_list.html文件中:
' w$ N- l4 H* N8 r' e& G找到 : D! w7 ]& `) ?( b2 V# ?- C
  1. <span id="atarget" {if !empty($_G['cookie']['atarget'])}onclick="setatarget(0)" class="y atarget_1"{else}onclick="setatarget(1)" class="y"{/if} title="{lang new_window_thread}">{lang new_window}</span>
复制代码
9 w7 c3 ]" a" n. t- h6 q

; K8 H4 h2 H* o$ R+ G; i* L' @! [用下边的替换即可 : }, O, d8 r) B8 g' Q4 d
  1. <span id="atarget" {if !empty($_G['cookie']['atarget'])}onclick="setatarget(0)" class="y atarget_1"{else}onclick="setatarget(1)" class="y"{/if} title="本窗口打开帖子">本窗口</span>
复制代码
/ {% H' S. p0 K8 N' e
4 Z' f' m3 V: c8 J8 ?3 p
) w5 J% m; l  a2 u- B* i' k3 P* ?
五、discuz x3 rss输出链接的静态化
) w$ n9 a3 Z8 u: {1 J% [* T5 T' Q( G" p& n3 j* q; K
rss的地址不能自动判断网站设置的是静态还是动态,一律会输出动态的样式,那对于开启了伪静态的朋友来说是个很不好的地方,如何将rss输出结果变成静态化呢?9 q: A. R: p. w7 ]! ]0 X
下面是具体修改步骤: 打开source/module/forum/forum_rss.php
/ A0 w/ p: [9 O8 j$ d1 _  q1、论坛首页URL标准化:(如果不需要标准的人不用修改 )
( o9 R- g) b( f+ H0 u) D) ~
- F' W$ T' S) r
  1. <link>{$_G[siteurl]}forum.php</link>
复制代码
1 E/ F7 t3 K; k4 w$ G5 e" q: Q
$ R& K& K: W) I
换成
6 C- f! I* n" m; H8 D, D
  1. <link>{$_G[siteurl]}</link>
复制代码

8 K# f3 }5 L8 x' Q) G! b8 N7 e; p9 s7 [# l# z9 I) w9 k
2、主题列表页URL伪静态:把   F% }8 s$ h5 Y2 S" G
  1. <link>{$_G[siteurl]}forum.php?mod=forumdisplay&fid=$rssfid</link>
复制代码

$ }' _! z- c' E" L; F6 ?
% W1 X; d  Q8 x8 |' N; ?改为
0 u+ y, ]! V8 K1 U) `: U6 J
  1. <link>$_G[siteurl]forum-$forum[fid]-1.html</link>
复制代码
, N5 W' T+ t: t4 t: y, ^- Y

8 D% ]6 M- L5 O3、帖子内容页URL伪静态:把
6 [# Z# x* y+ Z
  1. <link>$_G[siteurl]forum.php?mod=viewthread&tid=$thread[tid]</link>
复制代码

8 B, {/ _% H) u' T% j1 {$ x3 i0 F9 Q0 V
改为
* O+ f/ }1 z$ e( ]" u4 P+ `
  1. <link>$_G[siteurl]thread-$thread[tid]-1-1.html</link>
复制代码
; n* T' y9 W4 T# s  X; R1 G, d0 L( K

- h& n* n, s; t# _* m六、discuz X3 帖子链接统一(帖子链接唯一化)
8 o( t1 V) ^2 p5 m) x+ Q4 P: r4 @0 a* F; T# O5 \
开启了伪静态的帖子链接是这样的形式:thread-x-y-z.html,其中x是帖子的id(固定不变的),y是帖子的页数(也是固定的),z是帖子所在列表页的页数(这个是变化的,随着帖子回复或者新帖的加入,所处位置就会变化),如何让z不变呢,可能通过修改template/default/forum/forumdisplay_list.htm解决,修改后虽然帖子的url统一了,但是在帖子页里点击“返回列表”,返回的是列表第一页而不是帖子所在的列表页。
9 ?  [& [/ C2 M1 v  r! V* m找到 7 o+ i; A: t, E( g
  1. <a href="forum.php?mod=viewthread&tid=$thread[tid]&{if $_G['gp_archiveid']}archiveid={$_G['gp_archiveid']}&{/if}extra=$extra"$thread[highlight]{if $thread['isgroup'] == 1 || $thread['forumstick']} target="_blank"{else} onclick="atarget(this)"{/if} class="xst" >$thread[subject]</a>
复制代码
  I3 }( q7 o. C

; u( B) @1 u: q$ g5 ?; J9 T修改为 2 v6 R* O4 L, e2 T7 r
  1. <a href="forum.php?mod=viewthread&tid=$thread[tid]" $thread[highlight]{if $thread['isgroup'] == 1} target="_blank"{/if} onclick="atarget(this)" class="xst">$thread[subject]</a>
复制代码
) }8 W: b7 L% Z5 \9 |9 ~
& l& z& ]  d) T' J

$ z  J9 Q$ H; f( ~最后就是后台开启伪静态 设置规则  这些都默认设置就好了 这点这里 我就不说了 相信大家都知道了+ \. G% K; K( S( r1 ], J; E
注意 如果你在后台设置的时候修改了规则属性那么你修改过的地方也设置成相应的就行了。
当流科技-专业Discuz建站、仿站业务,专注处理discuz!论坛挂马,专注提供论坛托管维护服务! 提供Discuz论坛空间、VPS、云服务器!咨询QQ 569160956 778521512
回复

使用道具 举报

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

本版积分规则

精彩课程推荐

Discuz!论坛网盘附件免跳转下载(手机版网

主讲:当流科技 Discuz插件

抱歉,当前存在网络问题或服务器繁忙,详细错

主讲:我心枫叶 Discuz!教程

宝塔面板绑定域名无法访问后台怎么解决?

主讲:风雨兼程 服务器学院

discuz论坛搬家教程,如何搬迁到新服务器?

主讲:风雨兼程 Discuz!教程

宝塔面板phpmyadmin 数据库502 Bad Gateway

主讲:当流科技 服务器学院

Discuz!X3.3全新安装和升级后快速回复框丢

主讲:风雨兼程 Discuz!教程

宝塔面板mysql怎么用navicat 连接数据库呢

主讲:当流科技 服务器学院

Discuz! X3.4虚拟人气虚拟用户在线插件 完

主讲:执手天涯 Discuz插件

商务合作

0551-66191059
service#dangliu.net
点击这里给我发消息
dz论坛/Discuz!论坛新手

关注微信公众号

QQ扫码 加 DZ技术群