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文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
基于php权限分配的实现代码
Apr 28 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
ThinkPHP调试模式与日志记录概述
Aug 22 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
phplot生成图片类用法详解
Jan 06 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
php创建无限级树型菜单
Nov 05 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
php错误日志简单配置方法
Jul 11 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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
ASP知识讲座四
2006/10/09 PHP
php递归创建目录的方法
2015/02/02 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
Angular2安装angular-cli
2017/05/21 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python中常见错误及解决方法
2020/06/21 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
中文系学生自荐信范文
2013/11/13 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
导游词之南京中山陵
2019/11/27 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python