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 默默经典版本
Aug 04 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php 地区分类排序算法
Jul 01 PHP
PHP字符串长度计算 - strlen()函数使用介绍
Oct 15 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 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代码优化之成员变量获取速度对比
2014/02/28 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
document.write的几点使用心得
2014/05/14 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
vue实现拖拽效果
2019/12/23 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
Python中内建函数的简单用法说明
2016/05/05 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
python能开发游戏吗
2020/06/11 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
直接有效的自我评价
2014/01/11 职场文书
小加工厂管理制度
2014/01/21 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
授权委托书
2014/07/31 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
python基础之函数的定义和调用
2021/10/24 Python