zhansh 发表于 2021-10-7 15:26

关于 php header 请求

本帖最后由 zhansh 于 2021-10-10 16:02 编辑

//http://*/?hot=dhqcie/uplmzk.xlsx
if(!empty($hot) && !is_numeric($hot)){
      header('HTTP/1.1 404 Not Found');// 可以执行
      header('location: ./404/404.html');// 可以执行
}

//http://*/index.php/index.php?pvzebz/fjroti.pptx
$uri = $_SERVER['REQUEST_URI'];
if(!empty($uri) && strpos($uri, 'pptx') != false){
      //header('HTTP/1.1 404 Not Found');不能执行
      //header('location: ./404/404.html');   不能执行
// 执行完跳转到 http://*/index.php/404/404b.htm
      header('status: 404 Not Found');
      include('./404/404b.htm');
      exit();
//上面执行完跳转正确
}

请教大神,红色的两种跳转方式有什么不同呀?对搜索引擎效果是否一样?

fisher 发表于 2021-10-7 15:58

用location默认都返回302了,你应该先看下手册里面header到底怎么用
https://www.php.net/manual/zh/function.header.php

judgecx 发表于 2021-10-7 16:23

fisher 发表于 2021-10-7 15:58
用location默认都返回302了,你应该先看下手册里面header到底怎么用
https://www.php.net/manual/zh/funct ...

大佬能不能看看我的帖子

zhansh 发表于 2021-10-7 19:49

fisher 发表于 2021-10-7 15:58
用location默认都返回302了,你应该先看下手册里面header到底怎么用
https://www.php.net/manual/zh/funct ...

那就是说只要用一句
header('HTTP/1.1 404 Not Found');
就行了是吧,网上搜出来的基本都是写两三行的代码,不知道什么意思

zhansh 发表于 2021-10-7 19:54

本帖最后由 zhansh 于 2021-10-7 20:02 编辑

judgecx 发表于 2021-10-7 16:23
大佬能不能看看我的帖子
朋友再指导下,搞得晕的,就是想将这些链接跳转到 404,那最终应该怎么写好呢?

就是想让搜索引擎删除快照

zhansh 发表于 2021-10-7 20:16

大概明白了,用header('HTTP/1.1 404 Not Found'); 的时候返回的是 php 内部的 404 页面,而不是 IIS 内的 404,原来以为php 会返回到 IIS 的 404

zhansh 发表于 2021-10-7 20:28

fisher 发表于 2021-10-7 15:58
用location默认都返回302了,你应该先看下手册里面header到底怎么用
https://www.php.net/manual/zh/funct ...

        header('HTTP/1.1 404 Not Found');
        header('status: 404 Not Found');
        include('./404/404b.htm');
        exit();

谢谢朋友指导, 这样应该好多了

fisher 发表于 2021-10-8 16:29

本帖最后由 fisher 于 2021-10-8 16:35 编辑

zhansh 发表于 2021-10-7 20:28
header('HTTP/1.1 404 Not Found');
      header('status: 404 Not Found');
      include('./404/404b.htm'); ...
如果你不需要在CGI模式下运行,用header("HTTP/1.0 404 Not Found");就够了.
另外header("HTTP/1.0 404 Not Found");这个写法也不太好。文档里面也提到了这一句
> I strongly recommend, that you use
>
> header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
>
> instead of
>
> header("HTTP/1.1 404 Not Found");
>
> I had big troubles with an Apache/2.0.59 (Unix) answering in HTTP/1.0 while I (accidentially) added a "HTTP/1.1 200 Ok" - Header.

可以适当改一下,兼容1.1和2
```php
stripos(php_sapi_name(),'cgi') === 0 ? header('Status: 404 Not Found',true):header(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1').' 404 Not Found');
include('./404/404b.htm');
die; // 如果存在上层路由,建议直接宣布死刑
```

zhansh 发表于 2021-10-8 20:49

fisher 发表于 2021-10-8 16:29
如果你不需要在CGI模式下运行,用header("HTTP/1.0 404 Not Found");就够了.
另外header("HTTP/1.0...

谢谢朋友,我的就是 CGI 运行的,我再学习下你的代码,太专业了!{:1_921:}
页: [1]
查看完整版本: 关于 php header 请求