301 | LsevenTT博客-站群哥
   

LsevenTT博客-站群哥

认真你就输了

php完美实现多个域名指向同一网站的301转向

php完美实现多个域名指向同一网站的301转向

前不久,一哥们儿在给我博客做SEO的时候建议我做个301转向,因为我的博客为两个域名(LsevenTT.com及www.LsevenTT.com)同时访问同一个站点,需要做个主站,其他域名通过301转向到主站,以免搜索引擎分担主站的权重。开始的时候准备通过修改.htaccess实现301转向,不过貌似本博客用的nginx服务器,也没有服务器配置权限,看来只能通过修改php文件实现301转向了。

开始直接在核心文件(如:config.php等配置文件)中添加301转向代码,但是因为两个域名指向的是同一个网站,不论访问那个域名,都出现“死循环”的现象(用IE浏览器一直加载但无法打开页面,用Google浏览器提示转向循环)。要解决死循环还是比较简单的,判断一下访问的主机就ok了,方法如下:

$host=’LsevenTT.com’;//主站域名
if($_SERVER[‘HTTP_HOST’]!=$host)
{
header(‘HTTP/1.1 301 Moved Permanently’);//发出301头部
header(‘Location:’.$host);
}

将上述代码放入核心文件中,虽然能够转向,但是问题又来了,一旦访问非LsevenTT.com的域名的其他页面结果全部都转到LsevenTT.com的主页页去了,能否一对一的301转向呢?答案当然是肯定的,php确实够强大,呵呵~~完整的多域名301转向至同一网站代码如下:

<?php
/*
o******************************o
* *
*文件:301.php *
*功能:用于301转向。 *
*版本:终极版*
*URL:http://LsevenTT.com *
* *
o******************************o
*/

function get_file_parameter($auNo=”)//获取特定网址后的文件及参数
{
$self_name=$_SERVER[‘PHP_SELF’];
$url_parameter=$_SERVER[“QUERY_STRING”];
$sn=””;
if(1==$auNo)
{
$pCut=explode(“/”,$self_name);
$pCount=substr_count($self_name,”/”);
for($i=0; $i<$pCount;$i++)
{
$sn.=$pCut[$i].”/”;
}
}
else
{
$sn=$self_name;
}
if(empty($url_parameter))
$url=$sn;
else
$url=$sn.”?”.$url_parameter;
return $url;
}
$host=’LsevenTT.com’;//主站域名
$url=’http://’.$host.get_file_parameter();

if($_SERVER[‘HTTP_HOST’]!=$host)
{
header(‘HTTP/1.1 301 Moved Permanently’);//发出301头部
header(‘Location:’.$url);//转向
}
?>

将上述代码储存为301.php,在核心文件(或需要转向的文件)中通过require_once ‘301.php’;语句将其包含进去,这就可以实现多域名转向至同一站点了。

 

多域名对应同一网站、跳转的方法及泛域名设置详解

多域名对应同一网站、跳转的方法及泛域名设置详解

不断有朋友在博客问关于多个域名指向同一网站的问题,按说这是一个很基础很简单的问题,但对新手来说,可能有些误解,我在这里详细说下。
这里多个域名指向同一网站,是指裸域名(root domain)和其他如带www的域名指向同一网站。如输入abc.com或者www.abc.com,都是访问abc.com,正如本博客一样;或者输入lseventt.com或者www.LSEVENTT.com,都是访问www.abc.com,如淘宝。
还有一种输入abc.com或者www.abc.com,不跳转,但网页内容是一致的,如广告中国(advertcn.com)。

首先,说点基础知识。当一个人访问一个网站,
第一步你的电脑要到这个域名的dns服务器去把域名换成相应的ip,因为ip才是互联网真正的地址和门牌号,域名只不过是方便记忆的别名而已。(中间可能还有dns缓存服务器的过程);
第二步,你的电脑将访问网站的请求发送你的网站服务器,我们的一键包中nginx就是专门处理这种请求的,它根据发来的数据进行处理;
第三步,如果是静态网站,就直接在服务器上读取相应文件的数据(如果是动态的,就将请求数据发送到如php处理后再获取数据),发送给你的电脑浏览器,浏览器将数据解析,然后就展现了缤纷丰富的网页。

那么,如果出现问题,就应该根据相应错误,在这三个方面进行排除,找到正确的地方进行处理。

如果多个域名指向同一网站出问题,在排除dns设置出错之后,一般问题都出在nginx的配置上。
一般dns设置添加www为aname,指向根域名的同一ip(或者设置www的cname为@)

那么,有这么几种设置方法,供参考:

1、多个域名指向同一网站,并301跳转。推荐用这个方法。

 

比如我的博客actgod.com,nginx的设置是这样的:
vim /etc/nginx/sites-enabled/lseventt.com.conf修改其中这一部分,其他照旧
server_name actgod.com www.lseventt.com *.lseventt.com;
root /var/www/actgod.com;
if ( $host != "actgod.com" ) {
rewrite ^/(.*)$ http://lseventt.com/$1 permanent;
}

如果是想实现淘宝的那种跳转:
server_name lseventt.com www.lseventt.com *.lseventt.com;
root /var/www/www.lseventt.com;
if ( $host != "www.lseventt.com" ) {
rewrite ^/(.*)$ http://www.lseventt.com/$1 permanent;
}

修改好后,重新加载配置:
invoke-rc.d ngxin reload
2、多个域名指向同一网站,使用refresh跳转,百度是用的这个方法,也就是输入baidu.com自动跳转到www.baidu.com,但没用301跳转。
首先用
bash damnp-actgod.sh dhost yourdomain.com建一个空的虚拟主机。在此虚拟主机目录下新建一个index.html
vim /var/www/yourdomain.com/index.html内容如下:
<html>
<meta http-equiv="refresh" content="0;url=http://www.yourdomain.com/">
</html>

这种方法,一般来说不如第一种的,特别是从seo的方面考虑,同时需要多加载一个index,速度也有影响,虽然微乎其微。

3、广告中国那种不跳转,只需要修改配置:
vim /etc/nginx/sites-enabled/actgod.com.conf
server_name 后面添加多个域名即可,其他不用改。
server_name lseventt.com www.lseventt.com *.lseventt.com;

最后说下泛域名解析指向同一个网站。
也就是输入任何xxx.lseventt.com都指向lseventt.com,只需要在dns服务器设置 * 的aname为根域名同一ip,server_name 后面加上*.lseventt.com即可。如果要跳转,同上设置。