我有这个php脚本(test.php),它检查页面是否存在于mysql中,它应该返回404状态标题,但它返回200 OK状态。这会导致控制台中的软404错误。
我试图修复,但它根本不起作用。这是我的.htaccess。几个月前我将我的网站迁移到了SSL,我将所有流量从端口80重定向到https。
RewriteEngine On
ErrorDocument 404 /404.shtml
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
RewriteEngine on
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)/pressrelease([0-9]+)\.htm$ test.php?pressid=$4 [L]
这是我的test.php
<?php
include_once('dbc.php');
$pid = strip_tags(mysql_real_escape_string($_GET['pressid']));
$rs_dirs = mysql_query("select id,name from categories order by name") or die(mysql_error());
$rs_press = mysql_query("select *
from press
where id = '$pid'
and approved='1'
") or die(mysql_error());;
$total = mysql_num_rows($rs_press);
if (mysql_num_rows($rs_press) == 0) {
header("HTTP/1.1 404 Not Found");
include '404.shtml';
die();
}
这里有什么问题,如何解决?
答案 0 :(得分:2)
您没有将实际状态代码设置为404。
请参阅header
函数的用法:
http://php.net/manual/en/function.header.php
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
您的代码应为:
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
还有另一种功能:
https://secure.php.net/manual/en/function.http-response-code.php
http_response_code(404);
我更喜欢使用上面的功能。因为你的意图方式更加冗长。
答案 1 :(得分:0)
在您的代码中使用此代码:
if (mysql_num_rows($rs_press) == 0) {
http_response_code(404);
//and another staff here
}