阅读:4242回复:0
PHP301跳转的方法学习笔记
一,什么是301转向?
301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。 在php中正常的临时跳转通常使用: header("Location:www.smsyun.com"); 但是这种返回的状态码是302 如果要实现301跳转的话,需要在之前设置下状态码: header( "HTTP/1.1 301 Moved Permanently" ) ; header("Location:http://www.smsyun.com"); 二,为什么要做网址转向? 比如,为保护版权,你拥有不同TLD的多个域名: smsyun.com smsyun.net smsyun.org smsyun.com.cn smsyun.cn 等。 很自然这些域名全部指向一个网站。如用smsyun.com为主域名,其它域名就可以转向到smsyun.com。 或注册了公司全称域名smsyunlonglong.com,但太长 ,你也注册了缩写域名方便用户记住sms.com,其中一个做主域名,另一个就可以转向到主域名。 三,为什么要用301转向? 网址转向方法主要包括:301转向,302转向,JavaScript转向,PHP/ASP/CGI转向,META REFRESH网页META刷新,等。302转向可能会有URL规范化问题。其它方法都是常用的作弊手法,当然不是说不可以正当地用,方法本身没有错,但被作弊者用多了,搜索引擎对这些可疑的转向都很敏感。何必冒险呢。 当网页A用php 301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。 优点: 第一,没有网址规范化问题,第二,也很重要的,网页A的PR网页级别会传到网页B。 很多时候其它网站会链接到: http://smsyun.com http://www.smsyun.com/index.html http://smsyun.com/index.html 而不是我们希望或常用的: http://www.smsyun.com 这样链接的PR也会传递到所有URL,如果用php 301跳转把前三个URL转到: http://www.smsyun.com PR也就集中在网页http://www.smsyun.com了。 四,怎样做301转向 如果你用的是Unix/Linux主机,可以用file.gif文件(Unix/Linux中用于目录特定指令如密码,转向,错误处理等的文件)。 比如把/old.htm转到http://www.smsyun.com/new.htm,可以用这个指令: 代码示例: redirect 301 /old.htm http://www.smsyun.com/new.htm 或 redirect permanent /old.htm http://www.smsyun.com/new.htm 如果要把所有http://smsyun.com形式的URL用301重定向转到 http://www.smsyun.com,包括: 代码示例: http://smsyun.com/about.htm 转到 http://www.smsyun.com/about.htm 及 http://smsyun.com/dir/index.htm 转到 http://www.smsyun.com/dir/index.htm 等等,还要用到mod_rewrite: 代码示例: Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^smsyun.com [NC] RewriteRule ^(.*)$ http://www.smsyun.com/$1 [L,R=301] 如果使用 Windows主机,应该在控制面板做301转向设定。 补充 :在网址规范化评论里回答石头王的问题,可能对大家有帮助: 据我所知,HTML无法做301转向。在HTML里只能做JS或META REFRESH,但不是301转向。 HTML一被读取,就已经返回200 OK状态码了。 PHP可以做301转向: PHP代码示例: Header( “HTTP/1.1 301 Moved Permanently” ); Header( “Location: http://www.smsyun.com” ); 另外,DOThtaccess文件只是一个普通文字文件,你用Notepad建这个文件,放上指令,存在你帐号的根目录下就行了。 不需要修改Apache。 附:PHP的301自动跳转代码 将这个代码放到你所有网页的最前面,就可以实现301跳转了(可根据具体情况进行修改) 其中if($the_host !== 'www.smsyun.com')中的“!==”是不完全等于的意思,也可以用“!=”不等于,这样,除了可以将smsyun.com跳转到带www的网址,还可以把所有绑定到这个空间的域名跳转的www.smsyun.com。 因为首页跳转之后网址里会出现/index.php,增加了一个判断是否是首页的语句。 $the_host = $_SERVER['HTTP_HOST'];//取得当前域名 $the_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判断地址后面部分 $the_url = strtolower($the_url);//将英文字母转成小写 if($the_url=="/index.php")//判断是不是首页 { $the_url="";//如果是首页,赋值为空 } if($the_host !== 'www.smsyun.com')//如果域名不是带www的网址那么进行下面的301跳转 { header('HTTP/1.1 301 Moved Permanently');//发出301头部 header('Location:http://www.smsyun.com'.$the_url);//跳转到带www的网址 } 附:30*返回状态码的区别 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved), 302 redirect: 302 代表暂时性转移(Temporarily Moved ), 这两种转移在使用的时候有啥好处或者问题? 301 重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。 302 重定向是临时性转移。 |
|