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 相关文章推荐
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php 保留小数点
Apr 21 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
微信公众号实现会员卡领取功能
Jun 08 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长字符串定义方法
2012/07/12 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
python实现简单颜色识别程序
2020/02/19 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
化学相关工作求职信
2013/10/02 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
导游词之日月潭
2019/11/05 职场文书
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis