PHP Header用于页面跳转要注意的几个问题总结


Posted in PHP onOctober 03, 2008

1.header()函数

header()函数是PHP中进行页面跳转的一种十分简单的方法。header()函数的主要功能是将HTTP协议标头(header)输出到浏览器。

header()函数的定义如下:

void header (string string [,bool replace [,int http_response_code]])
可选参数replace指明是替换前一条类似标头还是添加一条相(3water.com)同类型的标头,默认为替换。

第二个可选参数http_response_code强制将HTTP相应代码设为指定值。 header函数中Location类型的标头是一种特殊的header调用,常用来实现页面跳转。注意:

1.location和“:”号间不能有空格,否则不会跳转。
2.在用header前不能有任何的输出。
3.header后的PHP代码还会被执行。例如,将浏览器重定向到3water.com

<?php 
 //重定向浏览器 
header("Location: https://3water.com"); 
 //确保重定向后,后续代码不会被执行 
exit;
?>

1、php跳转代码一句话式:

<?php 
$url = $_GET['url'];
Header("Location:$url");
?>

2、php跳转代码if判断式:

if($_COOKIE["u_type"]){ header('location:register.php'); } else{ setcookie('u_type','1','86400*360');//设置cookie长期有效 header('location:zc.html');

注:保存为zc.php,当用户访问zc.php时,判断一个cookie是否存在,如果存(3water.com)在就跳转到register.php,如果不存在则创建cookie然后跳转到zc.htmlfrom:https://3water.com/phper/php-cy/62883.htm

URL重定向函数

// URL重定向
function redirect($url, $time=0, $msg=”) {
 //多行URL地址支持
$url = str_replace(array(“n”, “r”), ”, $url);
 if ( empty($msg) )
 $msg = “系统将在{$time}秒之后自动跳转到{$url}!”;
if (!headers_sent()) {
 // redirect
 if (0 === $time) {
 header(‘Location: ‘ . $url);
 } else {
 header(“refresh:{$time};url={$url}”);
echo($msg);
 }
 exit();
 } else {
 $str = “<meta http-equiv='Refresh' content='{$time};URL={$url}'>”;
if ($time != 0)
 $str .= $msg;
 exit($str);
 }
 }

上面的不能返回404状态,如果是页面跳转之后返回404状态代码我们可如下操作

function getref()
 {
 $url = @$_SERVER['HTTP_REFERER'];
 if( !empty( $url ) )
 {
 if( !strstr($url ,'3water.com' ) && !strstr($url,'3water.com'))
 {
 @header("http/1.1 404 not found");
 @header("status: 404 not found");
 include("404.html");//跳转到某一个页面,推荐使用这种方法
 exit();
 }
 }
 else
 {
 @header("http/1.1 404 not found");
 @header("status: 404 not found");
 include("404.html");//跳转到某一个页面,推荐使用这种方法
 exit();
 }
 }

如果要做301也差不多

<?php 
 $the_host = $_SERVER['HTTP_HOST'];
 $request_uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
 if($the_host !== '3water.com')
 {
  //echo $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  header('HTTP/1.1 301 Moved Permanently');
  header('Location: https://3water.com' . $_SERVER['PHP_SELF'] . $request_uri);
 }
 ?>

下面是和asp中重定向response.redirect的比较:
例1:
response.redirect "../test.asp"
header("location:../test.php");
两者区别:
asp的redirect函数可以在向客户发送头文件后起作用.

<html><head></head><body>
<%response.redirect "../test.asp"%>
</body></html>
查是php中下例代码会报错:
<html><head></head><body>
<?
header("location:../test.php");
?>
</body></html>
只能这样:
<?
header("location:../test.php");
?>
<html><head></head><body>...</body></html>
即header函数之前不能向客户发送任何数据.
例2:
asp中
<html><head></head><body>
<%
response.redirect "../a.asp"
response.redirect "../b.asp"
%>
</body></html>
结果是重定向a.asp文件.
php呢?
<?
header("location:../a.php");
header("location:../b.php");
?>
<html><head></head><body></body></html>
我们发现它重定向b.php.
原来在asp中执行redirect后不会再执行后面的代码.
而php在执行header后,继续执行下面的代码.
在这方面上php中的header重定向不如asp中的重定向.有时我们要重定向后,不能执行后面的代码:
一般地我们用
if(...)
header("...");
else
{
...
}
但是我们可以简单的用下面的方法:
if(...)
{ header("...");exit();}
还要注意的是,如果是用Unicode(UTF-8)编码时也会出现问题,需要调整缓存设置.
<[email=%@]%@LANGUAGE="VBSCRIPT[/email]" CODEPAGE="936"%>
<%if Request.ServerVariables("SERVER_NAME")="s.3water.com" then
response.redirect "news/index.htm"
else%>
<%end if%>
<script>
var url = location.href;
if(url.indexOf('https://3water.com/')!=-1)location.href='/index/index.htm';
if(url.indexOf('http://www.kanshule.com/')!=-1)location.href='/index1/index.htm';
if(url.indexOf('http://www.shouji17.com/')!=-1)location.href='/cn/index.asp';
if(url.indexOf('http://www.baidu.com/')!=-1)location.href='/cn/index.asp';
</script>

PHP 相关文章推荐
PHP令牌 Token改进版
Jul 18 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
php+mysql实现简单的增删改查功能
Jul 13 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
smarty section简介与用法分析
Oct 03 #PHP
php相当简单的分页类
Oct 02 #PHP
php仿discuz分页效果代码
Oct 02 #PHP
php仿ZOL分页类代码
Oct 02 #PHP
php生成缩略图的类代码
Oct 02 #PHP
PHP实时显示输出
Oct 02 #PHP
PHP在字符串中查找指定字符串并删除的代码
Oct 02 #PHP
You might like
php Ajax乱码
2008/04/09 PHP
php 分页函数multi() discuz
2009/06/21 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php curl发送请求实例方法
2019/08/01 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
jQuery之排序组件的深入解析
2013/06/19 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
Python插件机制实现详解
2020/05/04 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
SQL语言面试题
2013/08/27 面试题
2014年车间主任工作总结
2014/12/10 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python