| 
 | 
 
Discuz!虽然可以利用伪静态实现301重定向,但是有些虚拟主机并不支持。这时,我们可以变通一下,使用PHP代码来实现301重定向。
论坛上有使用PHP实现Discuz!的301重定向的方法,但是不兼容伪静态。因为伪静态的URL经过服务器的解析之后,全部变为真实的URL,即动态URL。那么应该如何兼容伪静态呢?其实原理很简单,只需将获取到的动态URL重新转换为伪静态URL,然后再跳转。
以下是使用PHP实现Discuz!的301重定向的方法。该方法支持伪静态,你可能需要进行适当修改以符合你的伪静态规则。另外,该方法有一定难度,超级菜鸟谢绝使用,本人不负责解答任何疑问。
打开include/common.inc.php文件,找到:
- !defined(CURSCRIPT) && define(CURSCRIPT, );
 
  复制代码 
在后面添加:- require_once DISCUZ_ROOT../include/301.php;
 
  复制代码 
打开archiver/index.php文件,找到:
- define(CURSCRIPT, archiver);
 
  复制代码 
在后面添加:- require_once DISCUZ_ROOT../include/301.php;
 
  复制代码 
新建301.php文件,将下列代码保存至301.php文件,注意编码,保存到include目录下。- <?php
 - $Is301 = 0;//301开关
 - if ($Is301==0){
 - $GetDomain = strtolower("http://".$_SERVER[SERVER_NAME]); //获取当前域名
 - $NewDomain = "http://bbs.njuster.com"; //转发至新的域名
 - function NewUri(){ 
 - $StrUri = strtolower($_SERVER[REQUEST_URI]);//将获取的动态URL转换为小写
 - $StrUri = str_replace("/bbs/","/",$StrUri); //替换"/bbs/"为"/"
 - $StrUri = preg_replace("~(.*)/forumdisplay\\.php\\?fid\\=(\\d+)\\&page\\=(\\d+)\\&~", "$1/forum-$2-$3.html", $StrUri);
 - $StrUri = preg_replace("~(.*)/viewthread\\.php\\?tid\\=(\\d+)\\&extra\\=page\\%3d(\\d+)\\&page\\=(\\d+)\\&(\\d+)~", "$1/thread-$2-$4-$5.html", $StrUri);
 - $StrUri = preg_replace("~(.*)/space\\.php\\?(uid|username)\\=(.*)\\&~", "$1/space-$2-$3.html", $StrUri);
 - $StrUri = preg_replace("~(.*)/tag\\.php\\?name\\=([^&]+?)\\&~", "$1/tag-$2.html", $StrUri);
 - $StrUri = preg_replace("~(.*)/index\\.php\\?gid=(\\d+)~", "$1/index-gid-$2.html", $StrUri);
 - $StrUri = preg_replace("~(.*)/index\\.php~", "$1", $StrUri);
 - $StrUri = preg_replace("~(.*)/archiver/index.php\\?(fid|tid)-(\\d+)(.*)\\.html\\&~", "$1/archiver/$2-$3$4.html", $StrUri);
 - return $StrUri;
 - }
 - if($GetDomain !=$NewDomain){
 - Header("HTTP/1.1 301 Moved Permanently");
 - Header("Location: ". $NewDomain.NewUri());
 - exit();
 - }
 - }
 - ?>
 
  复制代码 |   
 
 
 
 |