Discuz 301重定向 静态文件修改
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); //获取当前域名
$NewDomain = \"http://bbs.njuster.com\"; //转发至新的域名
function NewUri(){
$StrUri = strtolower($_SERVER);//将获取的动态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();
}
}
?>
页:
[1]