我在PHP框架中使用mod_rewrite将用户友好链接重定向到应用程序的一个主要入口点。我正在使用的.htaccess文件看起来像这样:
<IfModule mod_rewrite.c>
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
现在,我想将该规则与ErrorDocument
指令一起使用。我该怎么做?当控制器丢失时,我的框架将响应代码设置为404
:
/**
* Sets the HTTP response code.
*
* @param int $errorCode The response code to return. <b>Supported codes: </b>301, 307, 400, 401, 403, 404, 500,
* 501, 502, 503
*/
function setHTTPStatus($errorCode) {
$httpStatusCodes = array(301 => 'Moved Permanently', 307 => 'Temporary Redirect', 400 => 'Bad Request',
401 => 'Unauthorized', 403 => 'Forbidden', 404 => 'Not Found', 500 => 'Internal Server Error',
501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable');
if (array_key_exists($errorCode, $httpStatusCodes)) {
header("HTTP/1.0 $errorCode $httpStatusCodes[$errorCode]", true, $errorCode);
exit;
}
}
我尝试添加第ErrorDocument 404 /index.php?url=404
行和ErrorDocument 404 /error
,但似乎没有效果,我得到了默认浏览器的错误页面。
有什么问题?
谢谢。
答案 0 :(得分:3)
通过.htaccess文件没有简单的方法。一旦你进入php代码域,apache就会通过.htaccess文件和httpd.conf文件进行处理,然后向框架前端进行切换。 controller - 在本例中是框架的index.php文件。
您使用的是哪种框架?
处理此问题的最佳方法是使用框架错误处理,而不是使用烘焙的apache处理。 apache 404适用于任何非框架服务的页面,如图像,css,js等等......你的框架应该有一个配置文件来设置默认的错误视图。