php header中301/404跳转要注意事项详解

 更新时间:2016年11月25日 17:26  点击:1434
如果你的网页出现301或404对于用户体验来讲是一个非常严重的问题了,所以我们在做php header301或404时就必须小心再小心了,正同我来看看。

301跳转

 代码如下 复制代码

header('HTTP/1.1 301 Moved Permanently');  
header('Location: http://www.abc.com/aaa/');  
exit();

不要漏了header(‘HTTP/1.1 301 Moved Permanently’); 不然返回不了301

404错误页面

 代码如下 复制代码

header("HTTP/1.1 404 Not Found");

如果上面的不起作用,可以试试下面的:

 代码如下 复制代码

header("Status: 404 Not Found");

所以为了万无一失,可以两句都写上:

 代码如下 复制代码

header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");

小提示,

如果写好代码之后我们必须使用站长工具来测试一下返回的状态是不是我们想要的哦。

攒,顶,踩功能主要用于评论中这里我们来做一个简单基于jquery ajax与php的mysql实现的攒,顶,踩功能,文章最后附了源码下载。

php应用越来越多,也越来越广泛,为了增加网站的丰富多彩,从而出现了很多新的技术。ajax是现代网站中不能缺少的一项技术,他可以异步刷新数据,而实现很多效果,比如刷新验证码,微博中的攒功能,都是运用这个。

本次攒功能的效果图:

主页文件(index.php):

 代码如下 复制代码

<script type="text/javascript" src="/Public/js/jquery.min.js"></script>

<script type="text/javascript" src="finger_ajax.js"></script>

<?php

 header("Content-type:text/html;charset=utf-8");

 include "finger_ajax.php";

 


 $sql = "select * from finger_ajax";

 $res = mysql_query($sql,$link);

 while($row = mysql_fetch_array($res)){

  echo "<p>".$row['title']." <a href='#' onclick='finger(".$row['id'].")'><img src='finger.jpg'/>攒一下(<span class='finger".$row['id']."'>".$row['finger']."</span>)</a></p> ";

 }

?>


处理ajax请求及配置信息文件(finger_ajax.php):

 

 代码如下 复制代码

<?php

 /**"攒" 功能 响应ajax请求*/

 //配置

 $dbHost = "localhost";

 $dbUser = "root";

 $dbPass = "dddddd";

 $dbName = "test";

 $dbCharset = "utf8";

 


 $link = mysql_connect($dbHost,$dbUser,$dbPass) or die(mysql_error());

 mysql_query("set names ".$dbCharset);

 mysql_select_db($dbName);

 // End

 


 //接受对应的id

 if(!empty($_POST['id'])){

  $id = $_POST['id'];

  //“攒”加1

  $sql = "update finger_ajax set finger=finger+1 where id=$id;";

  if(mysql_query($sql,$link)){

   echo "ok";

  }else{

   echo "failed";

  }

 }

?>


js文件(finger_ajax.js):

 

//攒 js

 代码如下 复制代码

function finger(topic_id){

 $.post("finger_ajax.php", { "id": topic_id },

   function(data){

     if(data=="ok"){

   alert("感谢您的支持!");

  }else{

   alert("对不起,失败了!");

  }

   }, "text"); 

 //获取当前“攒”的次数并加1

 var finger = parseInt($(".finger"+topic_id).html())+1;

 //更新“攒”的次数

 $(".finger"+topic_id).html(finger);

}


数据库代码(finger_ajax.sql):

 代码如下 复制代码


DROP TABLE IF EXISTS `finger_ajax`;

CREATE TABLE `finger_ajax` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `title` varchar(50) NOT NULL DEFAULT '',

  `finger` int(11) NOT NULL DEFAULT '0',

  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

 


-- ----------------------------

-- Records of finger_ajax

-- ----------------------------

INSERT INTO `finger_ajax` VALUES ('1', '今天天气还不错哦!去做点什么好呢?', '10');

INSERT INTO `finger_ajax` VALUES ('2', '欢迎来到 www.111cn.net,国庆将至,祝大家国庆节快乐!!', '3');


原文地址: php ajax实现攒,顶,踩的功能 http://file.111cn.net/upload/2013/12/a63.zip

 

在php获取一个url地址我会使用到超级全局变量$_SERVER,他包括了各种参数获取,如HTTP_HOST、PHP_SELF、QUERY_STRING等等,这里就不介绍了。

PHP获取URL的几个函数介绍

 代码如下 复制代码

<?php
//获取域名或主机地址
echo $_SERVER['HTTP_HOST']."<br>";
//获取网页地址
echo $_SERVER['PHP_SELF']."<br>";
//获取网址参数
echo $_SERVER["QUERY_STRING"]."<br>";
//来源网页的详细地址
echo $_SERVER['HTTP_REFERER']."<br>";
?>

把上面的几个函数组合一下,即可得到完整的URL地址

 代码如下 复制代码

<?php
// 说明:获取完整URL

function curPageURL()
{
    $pageURL = 'http';

    if ($_SERVER["HTTPS"] == "on")
    {
        $pageURL .= "s";
    }
    $pageURL .= "://";

    if ($_SERVER["SERVER_PORT"] != "80")
    {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    }
    else
    {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
?>

定义该函数之后就可以直接调用了:

 代码如下 复制代码

<?php
  echo curPageURL();
?>

301跳转就是告诉访问者页面己经永远到了新的页面了,在php中使用301跳转我们利用header()函数发送301状态代码告诉浏览器,然后再实现页面跳转即可。

PHP纯代码跳转

 代码如下 复制代码

<?php
 header("Location:http://www.111cn.net/");
 ?>

但是这种返回的状态码是302

如果要实现301跳转的话,需要在之前设置下状态码

 代码如下 复制代码

<?php
 header( "HTTP/1.1 301 Moved Permanently" ) ;
 header("Location:http://www.111cn.net/");
 ?>


更简单的PHP跳转301代码

 代码如下 复制代码

<?php

$urlto='http://www.111cn.net/';
header('Location: '.$urlto, TRUE, 301);
?>

可能出现的问题

Warning: Cannot modify header information - headers already sent by把文件编码改成 UTF-8无BOM格式 可解决该问题,如果还是有问题,就检查下该代码前是否定义了字符串变量,删除这个变量再试试。

附:30*返回状态码的区别
301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:

1.301 redirect: 301 代表永久性转移(Permanently Moved),
2.302 redirect: 302 代表暂时性转移(Temporarily Moved ),

这两种转移在使用的时候有啥好处或者问题?

301 重定向是网页更改地址后对seo搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。

302 重定向是临时性转移。

 

php中移动复制文件我们使用copy,下面我们来看一个简单的实例,他实现了目录与目录文件移动,希望此文章对大家帮助。

方法一,copy+unlink方式

我的思路是:移动=新建+删除。在移动之前在目标的目录新建一个文件夹,然后在把文件和目录都复制过去,最后在执行删除.

 代码如下 复制代码

/**
 * @parammoveDir  剪切文件和目录
 * @param string $to 目标文件路径
 * @param string $from 源文件路径
 */
function moveDir($from,$to){
 if(!is_dir($from)){//判断$from源文件目录是不是存在
  return false;
 }

 $from = rtrim(str_replace(‘//’,'/’,$from), ‘/’);//为了在linux上兼容,我们把/符号全部转换成/因为windows下面2个符号都可以的.
 $files = scandir($from);//列出源文件目录的文件和文件夹,并且以数组的形式存入 $files。

/*

$files的输出结果:

Array ( [0] => . [1] => .. [2] => a [3] => b [4] => c [5] => dir [6] => dir.php [7] => dir2 [8] => dir2.php [9] => function_file.php [10] => homework.php )
可以看到scandir这个函数会输出2个多余的值: [0] => . [1] => ..在这对我们木有用.写一个if干掉他们。
*/
 foreach($files as $file){//对 $files数组进行遍历,方便对数组里面的文件夹和文件进行复制和删除.
  if(in_array($file, array(‘.’,’..’))){// array(‘.’,’..’)新建了一个只有.和..的数组,并且查找$file里面知否有.和..这2个值
   continue;
  }
  $subFrom = $from.’/’.$file;//把遍历后的文件夹或者文件名变成一个新的路径
     $subTo = $to.’/’.$file;

  if(is_dir($subFrom)){
   @mkdir($subTo);//判断$subFrom是不是一个目录,如果是目录就在目标的目录下面,新建一个目录
   moveDir($subFrom, $subTo);//递归执行新建目录。
  }else{//不是目录的话,就直接复制文件.复制完就删除文件.
   copy($subFrom, $subTo);
   unlink($subFrom);//删除所有文件
  }
  @rmdir($subFrom);//删除所有的目录
 }
 return true;
}
moveDir(‘C:/Users/Administrator/Desktop/0704′,’e:’);//在这传递你要移动的文件或者目录的地址

方法二,rename

1.对于文件,rename可以在不同盘符之间移动.

2.对于空文件夹,rename也可以在不同盘符之间移动.但是目标文件夹的父目录必须存在.

3.对于非空文件夹,只能在同一盘符下移动.不过,1和3,应该差不多能够对付所有的应用情况了.

 代码如下 复制代码


<?php
    rename("D:/testdir/test","F:/totestdir/mydir");
?>

对于一个40M的文件,copy+unlink方式需要7.6249899864197秒,而rename方式,只需要0.024738788604736,快300倍.

 代码如下 复制代码

<?php
//定义一个变量,保存文件名
$file = "html/cache.txt";
$rename = "html/renameCache.txt";
//使用rename()函数重命名一个文件
if(rename($file,$rename)==TRUE){
echo "重命名文件成功!";
}else{
echo "重命名文件失败!";
}
//使用rename()函数移动文件,并改名
rename("html/renameCache.txt","html/a/2.txt");
//使用rename()函数重命名目录
rename("html","cache");
//使用rename()函数移动目录到目标目录
rename("b","cache/b");
?>

[!--infotagslink--]

相关文章

  • Element PageHeader页头的使用方法

    这篇文章主要介绍了Element PageHeader页头的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-27
  • 总结android studio注意事项及打不开等问题解决方法

    经过一段时间的使用,总结了android studio打不开等问题的6种解决方法及android studio注意事项,希望对大家有所帮助。 1 首次运行,建立好项目需要下载一些东西,如果...2016-09-20
  • PHP中header()函数有什么用?常见header 状态

    在php中header()函数是很大的作用可以发送各种状态代码,也可以实现一些输出下载,下面我们一起来看看一些相关实例吧。 什么是头信息? 这里只作简单解释,详细的自己看...2016-11-25
  • Illustrator文字转曲的操作方法与注意事项分享

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说文字转曲的操作方法以及注意事项,各位想知道具体信息的使用者们,那么下面就快来跟着小编一起看看吧。...2016-09-14
  • 微信小程序页面开发注意事项整理

    这篇文章主要介绍了微信小程序页面开发注意事项整理的相关资料,需要的朋友可以参考下...2017-05-22
  • 网页页面控制注意事项

    1、检查标题。2、检查版权信息,尤其是电话号码。3、图片、文件定位问题。4、产品页面首页指向产品类别问题。5、文章页面首页指向文章类别问题。6、产品图片大小...2016-09-20
  • 网站改版要怎么那些?网站改版注意事项

    站改版是每个站长必然经历的过程,也是每个网站必定会发生的状态。网站希望建设越来越好改版是不可避免的,但是网站改版对于网站优化和推广来说又是一大弊端,无论是网站结...2016-10-10
  • 站长注意:网站性能最佳体验

    1、尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容。这部分时间包括下载页面中的图像、样式表、脚本、Flash等。通过减少页面中的元素可以减...2016-10-10
  • php 总结数值计算的注意事项

    php数值计算有一些结果可能并不是我们想的那样但它这样计算有自己的理论基础了,下面我们来看一篇php 总结数值计算的注意事项吧。 一:四舍五入 1.round —...2016-11-25
  • PHP匿名函数与注意事项详解

    匿名函数是PHP5.3引进来了,php5.3不但引进了匿名函数还有更多更好多新的特性了,下面我们一起来了解一下PHP匿名函数与注意事项详解 PHP5.2 以前:autoload, PDO 和 My...2016-11-25
  • 网站SEO中页面搜索结果匹配的注意事项

    什么是搜索结果匹配?非常简单,我们把它分成完全匹配和部分匹配。那么究竟什么是完全匹配呢?我们先来举个例子,百度搜“seo是什么”,结果中出现红色的字就是匹配项。 ...2016-10-10
  • PHP双引号使用注意事项

    双引号在php使用中我们通常把它定义为字符串了,但你知道双引号在使用过程中会有一些小问题呢,那么有什么问题我们来看看 PHP很多语法特性会让攻击者有机可乘,例如PH...2016-11-25
  • MYSQL到ORACLE程序迁移的注意事项

    MYSQL到ORACLE程序迁移的注意事项 2001-09 有很多应用项目, 刚起步的时候用MYSQL数据库基本上能实现各种功能需求,随...2016-11-25
  • 新站成长的几点注意事项

    第一:网站别急着上线   有的童鞋网站上线就是买了空间和域名之后,将程序直接丢在空间里面,然后就是哪天有问题,就随机随地的修改;这里,我自己是不赞同的,网站买了空间之后,...2016-10-10
  • BootStrap注意事项小结(五)表单

    这篇文章主要介绍了BootStrap注意事项小结(五)表单的相关资料,非常不错,具有参考借鉴价值,,需要的朋友可以参考下...2017-03-13
  • 经验共享:网站建设中应该注意的12个错误

    本文认真总结了网站建设中我们难免犯的一些错误,希望大家做网站的时候要提高警惕。   1. “欢迎访问本站”?免了吧!   像这样没有意义的玩艺儿,包括商号...2017-07-06
  • ORACLE数据库应用开发的三十个注意事项

    今天笔者结合二十余年的ORACLE数据库应用开发和运维的经验教训,总结在使用ORACLE数据库环境中的应用开发中需要注意的一些注意事项,这些问题不但可以作为ORACLE数据库开发的注意事项,大多数也适用于常见的关系型数据库开发甚至非关系型数据开发。...2021-06-06
  • php中header函数后是否应该有exit

    php header后是否需要书写exit以终止程序,以前一直没有太在意,今天遇到个bug,才发现这还是个问题,特意写了段代码测试了一下,代码如下: 通常有一下三种: ...2016-11-25
  • 高端网站建设规避网站设计注意事项

    今天文章要给大家介绍的是高端网站建设规避网站设计注意事项,让大家更好的了解网站建设,还不知道的下面就一起来看看。 现在做网站不仅仅只是做网站这样简单,如何让...2017-07-06
  • ASP.NE网站发布注意事项简析

    ASP.NET网站部署到IIS中的关键点,本文介绍了一些ASP.NE网站在发布是需要注意事项,需要了解的朋友可以参考下...2021-09-22