发送 PHP 标头时不显示通过 Htaccess 的自定义 405 错误消息

Posted

技术标签:

【中文标题】发送 PHP 标头时不显示通过 Htaccess 的自定义 405 错误消息【英文标题】:Custom 405 Error Message via Htaccess Doesn't show When Sending PHP Header 【发布时间】:2014-05-13 16:01:06 【问题描述】:

我通过返回 405 来阻止直接访问以下文件,除非用户使用以下代码提交了表单:

<?php
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') 
    header("HTTP/1.0 405 Method Not Allowed"); 
    exit();  else 

if(isset($_POST['a']))

    switch ($_POST['a']) 

    case "1":
        $var = "hey";
        break;

    case "2":
        $var = "now";
        break;

    default:
        $var = "other";
    
  

?>  
<!doctype html>
<html>
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
something
</body>
</html>

由于 Chrome 和 FF 显示的是空白页而不是 en 错误(即使它们会显示 404 而不是空白页以防我输入错误的 URL,所以我不确定它是如何工作的),我想创建一个自定义 405 消息,因此我已将此行添加到我的 .htaccess 中:

ErrorDocument 405 /custom-msg.php

然而,我仍然得到一个空白页面,而不是自定义消息。 这里有什么问题?

【问题讨论】:

【参考方案1】:

Apache 未设置为针对 PHP 设置状态代码处理错误文档。与您的 404 问题类似,请尝试:

if ($_SERVER['REQUEST_METHOD'] !== 'POST') 
header("HTTP/1.0 405 Method Not Allowed"); 
include 'custom-msg.php';
exit(); 

【讨论】:

忽略之前的评论,让我再看一遍:) 谢谢,我想我也会在 IE 上看到这个,但是包含只适用于 FF/Chrome,现在可以制作这个统一了吗? 您的 custom-msg.php 文件有多大? IE 仅在响应超过 512 字节时才显示响应 :) x

以上是关于发送 PHP 标头时不显示通过 Htaccess 的自定义 405 错误消息的主要内容,如果未能解决你的问题,请参考以下文章

通过 .htaccess 文件为所有 PHP 脚本设置 HTTP 标头

stomp nodejs在连接时不发送标头

PHP标头404不起作用

如何通过 htaccess 显示 PHP 错误 [重复]

使用 htaccess 在标头内设置文件名

通过 .htaccess 设置过期标头和压缩数据