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 数组入门教程小结
May 20 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
PHP仿盗链代码
Jun 03 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
php创建类并调用的实例方法
Sep 25 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
php慢查询日志和错误日志使用详解
Feb 27 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中数组定义的几种方法
2013/09/01 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
js实现星星打分效果的方法
2020/07/05 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
JS实现获取剪贴板内容的方法
2016/06/21 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
Python正则表达式匹配中文用法示例
2017/01/17 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
董事长秘书岗位职责
2013/11/29 职场文书
市场营销个人求职信范文
2014/02/02 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
村庄绿化方案
2014/05/07 职场文书
邀请函范文
2015/02/02 职场文书
教师个人年度总结
2015/02/11 职场文书
2015年老干部工作总结
2015/04/23 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
创业计划书之家政服务
2019/09/18 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js