【原创】子目录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/ 。 我总算找到解决办法了,谢谢
请问这样做 对网站SEO有影响么?
我使用的是wordpress,编辑根目录下的index文件没有效果,然后我编辑主题目录的index.php然后生效了,
这样对SEO没影响吧!
谢谢 本帖最后由 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]