返回码200

#1 chunjiao2012

请教:
现网站有个情况:网页错误,状态返回码都为200;加了404页面跳转后,返回码为302。现在需要所有错误的页面的返回码为404,而非200,怎么设置呀?

2014-08-04 11:29:07

#2 jake

'dispatcher_error' => "import(APP_PATH.'/404.html');exit();",

把里面改一下,比如说

'dispatcher_error' => "my404();exit();",

执行个my404()的函数,然后这函数里面加上 header 输出404。

2014-08-04 13:30:44

#3 chunjiao2012

jake 发表于 2014-8-4 13:30
'dispatcher_error' => "import(APP_PATH.'/404.html');exit();",

把里面改一下,比如说
函数my404()写在控制器main.php里面吗???还有就是原理是怎么的?
因为之前看见你在别的回复里面说是因为:在.htaccess里面设置,使得404转向index.php,才导致无404的,怎么通过你上述方法就把404恢复了呢?

2014-08-04 14:28:18

#4 jake

chunjiao2012 发表于 2014-8-4 14:28
函数my404()写在控制器main.php里面吗???还有就是原理是怎么的?
因为之前看见你在别的回复里面说是因 ...
my404()要写在全局位置,比如说index.php里面,或者index.php包含一个文件里面这样。

因为服务器转向把404全部转到index.php上面了,上述的方法是index.php检查如果没有匹配的路由规则,那么就会执行dispatcher_error里面的代码。

2014-08-04 16:05:03

#5 chunjiao2012

jake 发表于 2014-8-4 16:05
my404()要写在全局位置,比如说index.php里面,或者index.php包含一个文件里面这样。

因为服务器转向把4 ...
这样做之后,页面状态返回码还是302  ,而不是404,

我是希望不要将404错误跳转到index.php,而是直接跳转到404页面,这样它页面的返回码才是404。


然后搜索引擎才知道这个页面就是404无效的页面。


请问应该怎么做呢?

2014-08-04 16:35:17

#6 jake

function my404(){
header("HTTP/1.0 404 Not Found");
}

my404是这样的函数,输出头肯定是404的。

不希望404转向到index.php,可以在服务器上面设置不用urlrewrite,那么这样就不会有转向了

2014-08-04 17:17:04

#7 JeremyVan

我也遇到URL的问题,好棘手{:soso_e101:},希望所有错误的URL能跳到404页面,案例一就是我想要的效果案例一:

s1.jpg

speedphp网站的一个链接:http://www.speedphp.com/thread-3881-1-8.html 我把“3881”改成“abcd”能跳到404;
404.jpg


我的网站用上述方式随意修改一个参数就如下图显示空白;
mypage.jpg

在网站某些页面后加后缀如"_abcdd"这种形式,网站没有报错还留在之前的页面上。

谢谢指教了{:soso_e121:}


2014-08-04 17:53:38

#8 jake

JeremyVan 发表于 2014-8-4 17:53
我也遇到URL的问题,好棘手,希望所有错误的URL能跳到404页面,案例一就是我想要的效果案例一 ...
加一下 dispatcher_error这个配置

2014-08-04 21:03:09

#9 JeremyVan

但我已经加了 dispatcher_error配置, dispatcher_error是处理路由错误的函数

2014-08-05 10:12:17

#10 JeremyVan

我的小站在部署模式下显示数据库错误信息“SELECT COUNT(id_majr) as sp_counter FROM (select id_majr,ename_majr from tb_majo) sp_tmp_table_pager1
执行错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and ctry_univ = 7 ) sp_tmp_table_pager1' at line 8”

2014-08-05 10:13:11

#11 JeremyVan

切换到r发布模式页面变成空白,没有报错和也没有跳转到404。我在之前评论里所描述的把url中的“3881”改成“abcd”产生的错误不属于路由错误吧。(评论一直提交不了,就分开发了)感谢jake!

2014-08-05 10:14:07

#12 jake

spPager有使用范围的,具体看手册

2014-08-05 10:15:08

#13 chunjiao2012

我想上一楼的意思是:在改变地址 url 的时候,会出现两张错误。
一 :路由错误;
二:数据库方面的错误;
而配置'dispatcher_error',只能将第一种错误转向404.

2014-08-05 12:43:50

#14 chunjiao2012

我想上一楼的意思是:在改变地址 url 的时候,会出现两张错误。
一 :路由错误;
二:数据库方面的错误;
而配置'dispatcher_error',只能将第一种错误转向404.

2014-08-05 12:43:55

#15 chunjiao2012

一:路由错误
二:数据库执行错误

2014-08-05 12:45:27

#16 jake

chunjiao2012 发表于 2014-8-5 12:45
一:路由错误
二:数据库执行错误
数据库错误,或者一般的执行错误,可以配置sp_error_throw_exception,然后在index.php里面接收抛出错误来显示。

如果是php执行错误,那只能在服务器层面修改500提示了。

2014-08-05 14:22:11

#17 JeremyVan

jake 发表于 2014-8-5 14:22
数据库错误,或者一般的执行错误,可以配置sp_error_throw_exception,然后在index.php里面接收抛出错误 ...
设置 sp_error_throw_exception=true后,如何在index.php中接收抛出的异常呀?怎么写呀?新手一枚,谢谢啦!


2014-08-06 09:40:20

#18 jake

define("APP_PATH",dirname(__FILE__));
define("SP_PATH",dirname(__FILE__).'/SpeedPHP');
$spConfig = array(

);
require(SP_PATH."/SpeedPHP.php");
try{
spRun();
} catch (Exception $e) {
    echo "这里是一个错误";
}

2014-08-06 10:22:49

#19 JeremyVan

非常谢谢!

2014-08-06 10:47:07