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初学者头疼问题总结
Oct 09 PHP
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
PHP页面中文乱码分析
Oct 29 PHP
理解PHP中的stdClass类
Apr 18 PHP
ThinkPHP模板判断输出Empty标签用法详解
Jun 30 PHP
php判断两个浮点数是否相等的方法
Mar 14 PHP
php获取错误信息的方法
Jul 17 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
PHP压缩图片功能的介绍
Mar 21 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 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/06/27 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
js动态修改表格行colspan列跨度的方法
2015/03/30 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
Node.js Buffer用法解读
2018/05/18 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
python3正则模块re的使用方法详解
2020/02/11 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
python爬虫工具例举说明
2020/11/30 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
音乐专业自荐信
2014/02/07 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android