伪静态下类名不存在如何跳转到404页面

#1 jacob_cyl

现在网站设置了伪静态和404跳转,如果输入 http://localhost/abc 则会正常跳转到404页面,但是如果在后面加个斜杠 http://localhost/abc/ 就会提示错误:abc/类名称错误,请检查。请问如何可以使页面出现这种情况跳转到404页面?
注:我的网站上abc这个类不存在,没有这个控制器。前一种就正常跳转,后一种就提示错误。


2012-10-12 00:03:56

#2 jake

请先看手册http://www.speedphp.com/thread-3848-1-1.html

2012-10-12 08:44:28

#3 jacob_cyl

jake 发表于 2012-10-12 08:44
请先看手册,http://www.speedphp.com/thread-3848-1-1.html
完全按照你说的那个做的。http://localhost/asdlfjasdjf   http://localhost/asdlfjasdjf.html  都没错,就是http://localhost/asdlfjasdjf/
   http://localhost/asdlfjasdjf/asdfasdf 出错。

2012-10-12 09:29:41

#4 jacob_cyl

jake 发表于 2012-10-12 08:44
请先看手册,http://www.speedphp.com/thread-3848-1-1.html
我下载那个  http://www.speedphp.com/forum.php?mod=viewthread&tid=3728 下面的 rewrite25[1].rar
然后按照 http://www.speedphp.com/thread-3848-1-1.html 来做,结果同样出现我这个错误。



2012-10-12 09:37:53

#5 jacob_cyl

jake 发表于 2012-10-12 08:44
请先看手册,http://www.speedphp.com/thread-3848-1-1.html
20121012094011.jpg

2012-10-12 09:41:26

#6 jacob_cyl

jacob_cyl 发表于 2012-10-12 09:41
20121012093914.jpg
这个都是用网站上面下载的程序加上上面的手册配置的。

2012-10-12 09:42:50

#7 jake

那不是“找不到控制器”哦,而是错误提示,所以需要配置错误提示为404转向:

看手册:http://www.speedphp.com/thread-3833-1-1.html

错误抛出后接住再显示404。

2012-10-12 09:43:35

#8 jacob_cyl

哦,其实是spClass处默认认为域名后面那串是控制器,一个控制器如果是 “XXX/” 就会报错。
我使用这个: 'sp_notice_php' => SP_PATH."404.html", 不知道这样是否妥当呢。可是这样返回的是200状态码。

2012-10-12 10:45:13

#9 jacob_cyl

我的最终解决方法是:
伪静态配置需要加上
'spUrlRewrite' => array('sep' => '/'); //以 '/' 作为分隔符
就可以防止框架将 '/'当做类名的一部分。
但这不是最好的办法,我觉得应该在spClass处判断如果分隔符是XXX,就XXX,避免这种误判。
另外如果部署了之后,再增一条:
'sp_notice_php' => SP_PATH."404.html",
把所有这些可能的未知错误都指向404就不用担心太多了。顺便修改spError 如下:
header('HTTP/1.0 404 Not Found');   //加上这句,返回404错误码
require_once($GLOBALS['G_SP']['sp_notice_php']);
不知以上方案是否妥当,目前使用起来觉得还可以。

2012-10-12 11:25:05

#10 jacob_cyl

jake 发表于 2012-10-12 09:43
那不是“找不到控制器”哦,而是错误提示,所以需要配置错误提示为404转向:

看手册:http://www.speedphp ...
请教jake,我楼上的解决方案你觉得可行吗?

2012-10-12 11:26:38