PHP实现根据状态码跳转指定页面

比如 404,503 等页面的指定跳转。

当然有多种方案:
代码判断
服务器配置
htaccess 文件配置

当 在TP中实现出现问题。
代码的话 影响系统代码效率
服务器配置会遭 伪静态的语句冲突
htaccess 文件配置 同理(如果去掉伪静态则可以正常生效)

解决:
当然TP中的404可以结合  empty控制器指定返回404码并重新跳转指定页面实现(参考http://www.thinkphp.cn/info/273.html),但是其本身的服务器404页面(如访问不到资源的请求404就难以实现了,这个和503道理一样),可是503就不能按照如上方案实现了。
意思是只要配置一不能生效就没法实现了。

所以请求的503和404目前只能通过代码判断实现,弊端就是效率问题,既然503代码判断了,那么404也就可以一起判断了, empty 的跳转处理显得多余。


放于入口跳转的代码(考虑到效率问题,慎用,为了优化影响效率得不偿失):
if($_GET['k'] != 'h'){//注意防止死循环
$info = get_headers('http://ng.lh.nd.com?k=h');
if(stripos($info['0'],'503')!== false){
header('Location:http://www.baidu.com');
}
}

如下是冲突不生效的配置文件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
ErrorDocument 404 http://www.baidu.com

TP  empty跳404的实现:
  • class EmptyAction extends Action{ 
  •     function _empty(){ 
  •         header("HTTP/1.0 404 Not Found");//使HTTP返回404状态码 
  •         $this->display("Public:404"); 
  •     } 
  • } 

学习参考资料:
http://www.poluoluo.com/jzxy/201405/273706.html
http://zhidao.baidu.com/link?url=WQLuo0QaEXipZJ_BVwWXMn17BQi1fjrmFLLqDhTGJMewq-
wEXzOaLSlsXAExloCm-FQr7Kxp44ejpfR0G_vhcrKMIm_NGxltnXiM2Vsrwny
http://www.thinkphp.cn/topic/9867.html
http://www.thinkphp.cn/info/273.html



posted @ 2016-08-04 15:34  Newman·Li  阅读(389)  评论(0编辑  收藏  举报