|
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();
- }
- }
- ?>
复制代码 |
|