IsaacZ 发表于 2010-5-4 02:36:47

【原创】子目录301重定向到二级域名的PHP代码

本帖最后由 IsaacZ 于 2010-8-6 21:25 编辑

研究了好几个小时,一点心得,分享给大家:


缘起:曾经使用过二级子目录 https://www.dianbo.org/bbs 来访问论坛,现在为这个子目录绑定了独立域名bbs.dianbo.org,打算全面更改为使用 http://bbs.dianbo.org 来访问。以下是修改方法:


常规页面的跳转:


在网站根目录新建一个 301.inc.php 文件,写入以下代码(红色处换成自己的新域名):

<?php
$the_host = $_SERVER['HTTP_HOST'];   //取得当前访问域名
$url = $_SERVER['PHP_SELF'];   //获取域名后的字串,如:/bbs/index.php
$filename= substr( $url , strrpos($url , '/')+1 );   //提取当前文件名
$querystring = $_SERVER["QUERY_STRING"];   //获取问号后面的参数
if ($the_host !== 'bbs.dianbo.org')    //验证当前访问域名:若非引号内的域名,则进行如下跳转——
{
if ($querystring !== '')   //验证文件名后是否有参数,如果有参数则跳转到——
{
header('HTTP/1.1 301 Moved Permanently');   //发出301头部,表明永久重定向
header('Location: http://bbs.dianbo.org/'.$filename.'?'.$querystring);    //跳转到我的新域名地址【带参数】
}

elseif ($filename == 'index.php')   //如果是主页则直接跳转到新域名
{
header('HTTP/1.1 301 Moved Permanently');//发出301头部,表明永久重定向
header('Location: http://bbs.dianbo.org/');   //跳转到我的新域名
}

else    //如果无参数则跳转到——
{
header('HTTP/1.1 301 Moved Permanently');    //发出301头部,表明永久重定向
header('Location: http://bbs.dianbo.org/'.$filename);    //跳转到我的新域名地址【不带参数】
}
}
?>

然后在每一个需要跳转的PHP页面的 <?php下面加一行:

include("301.inc.php"); //301重定向



对于Discuz 7.2 论坛来说,通常需要跳转的是以下几个页面:

index.php
forumdisplay.php
viewthread.php
redirect.php
tag.php
logging.php
space.php

演示页面:

https://www.dianbo.org/bbs
https://www.dianbo.org/bbs/
https://www.dianbo.org/bbs/forumdisplay.php?fid=68
https://www.dianbo.org/bbs/forum.php?mod=viewthread&tid=9991
https://www.dianbo.org/bbs/forum.php?mod=viewthread&tid=9991
https://www.dianbo.org/bbs/redirect.php?tid=6019&goto=lastpost#lastpost
https://www.dianbo.org/bbs/misc.php?mod=tag&name=TE4XP



以上链接打开后,https://www.dianbo.org/bbs 部分都会自动变为 http://bbs.dianbo.org/ 。



Discuz! 7.2 论坛 archiver 无图版页面的跳转:


纯文本格式的 archiver 因为是在一个单独的目录,所以跳转代码要单独写。方法如下:

在论坛 /archiver/ 下新建一个 301.inc.archiver.php 文件,,写入以下代码(红色处换成自己的新域名):

<?php   
$the_host = $_SERVER['HTTP_HOST']; //取得当前访问域名
$url = $_SERVER['PHP_SELF'];//获取域名后的字串,如:/archiver/?fid-48.html尽管写作 /?fid-48.html ,实际上相当于 /index.php?fid-48.html
$filename= substr( $url , strrpos($url , '/')+1 );   //提取当前文件名,也就是 index.php
$querystring = $_SERVER["QUERY_STRING"];   //获取问号后面的参数
if ($the_host !== 'bbs.dianbo.org')    //验证当前访问域名:若非引号内的域名则进行如下跳转——>>
{
if ($querystring !== '')   //验证文件名后是否有参数,如果有参数则跳转到——
{
header('HTTP/1.1 301 Moved Permanently');   //发出301头部,表明永久重定向
header('Location: http://bbs.dianbo.org/archiver/'.'?'.$querystring);   //跳转到我的新域名地址【带参数】
}
else   //如果无参数则跳转到——
{
header('HTTP/1.1 301 Moved Permanently');   //发出301头部,表明永久重定向
header('Location: http://bbs.dianbo.org/archiver/');    //跳转到我的新域名地址【不带参数】
}
}
?>

然后在 /archiver/index.php 页面的 <?php下面加一行:

include("301.inc.archiver.php");   //301重定向

演示页面:
https://www.dianbo.org/bbs/archiver
https://www.dianbo.org/bbs/archiver/
https://www.dianbo.org/bbs/archiver/?fid-48.html
https://www.dianbo.org/bbs/archiver/?tid-5242.html

以上链接打开后,https://www.dianbo.org/bbs 部分都会自动变为 http://bbs.dianbo.org/ 。

Youwei 发表于 2010-5-12 01:27:21

我总算找到解决办法了,谢谢

请问这样做 对网站SEO有影响么?

我使用的是wordpress,编辑根目录下的index文件没有效果,然后我编辑主题目录的index.php然后生效了,
这样对SEO没影响吧!

谢谢

IsaacZ 发表于 2010-5-12 01:46:38

本帖最后由 IsaacZ 于 2010-8-6 21:55 编辑

对SEO只有好处,便于集中流量到一个主域名,同时避免出现多个网址内容相同。

根目录下也是可以的,测试:http://www.isaacz.com


不过如果是根目录,代码可以简单些:

<?php
$the_host = $_SERVER['HTTP_HOST'];//取得当前访问域名
$request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//获取域名后的字串,如:/index.php
if ($the_host !== 'www.dianbo.org')   //验证当前访问域名:若非引号内的域名,则进行如下跳转
{
if ($request_uri == "index.php")//如果是主页则直接跳转到新域名
{
    header('HTTP/1.1 301 Moved Permanently');//发出301头部,表明永久重定向
    header('Location: http://www.dianbo.org');    //跳转到我的新域名地址
}
else                                        //如果非主页则跳转到带文件名的地址
{
header('HTTP/1.1 301 Moved Permanently');//发出301头部,表明永久重定向
header('Location: http://www.dianbo.org'.$request_uri);    //跳转到我的新域名地址
}
}
?>
页: [1]
查看完整版本: 【原创】子目录301重定向到二级域名的PHP代码