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.MVC的模板标签系统(三)
Sep 05 PHP
优化PHP代码的53条建议
Mar 27 PHP
php escape URL编码
Dec 10 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
fgetcvs在linux的问题
Jan 15 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php定时执行任务设置详解
Feb 06 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
php7下的filesize函数
Sep 30 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 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&amp;java(二)
2006/10/09 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
深入理解js promise chain
2016/05/05 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
vue的for循环使用方法
2019/02/12 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
介绍Python的@property装饰器的用法
2015/04/28 Python
python读写二进制文件的方法
2015/05/09 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
keras之权重初始化方式
2020/05/21 Python
英国手工制作的现代与经典的沙发和床:Love Your Home
2020/09/26 全球购物
英语国培研修感言
2014/02/13 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
小学生新年寄语
2014/04/03 职场文书
小学假期安全广播稿
2014/09/28 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
给老婆的检讨书
2015/01/27 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
诚信教育主题班会
2015/08/13 职场文书