Esta pergunta não recebeu muita atenção e eu mesmo consegui responder a pergunta. Assim, minha resposta. Isso é possível da seguinte maneira. Qualquer melhoria é bem-vinda.
Abaixo deve estar no arquivo .htaccess
:
order allow,deny
deny from all
<FilesMatch "^route\.php$">
# replace 0.0.0.0 with IP that is allowed to access the Matched files
allow from 0.0.0.0
</FilesMatch>
ErrorDocument 400 /error.php?code=400
ErrorDocument 401 /error.php?code=401
ErrorDocument 403 /error.php?code=403
ErrorDocument 404 /error.php?code=404
ErrorDocument 500 /error.php?code=500
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^route.php/(.*)$ index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 403 /error.php?code=403
</IfModule>
O seguinte deve estar no arquivo error.php
:
if (!function_exists('http_response_code_text'))
{
function http_response_code_text($code = 403)
{
$text = 'Forbidden';
switch ($code)
{
case 400: $text = 'Bad Request'; break;
case 401: $text = 'Unauthorized'; break;
case 403: $text = 'Forbidden'; break;
case 404: $text = 'Not Found'; break;
case 500: $text = 'Internal Server Error'; break;
default:
$text = 'Forbidden';
break;
}
return $text;
}
}
$code = 403;
if(isset($_GET['code']{0}))
{
$code = (int) $_GET['code'];
}
$text = http_response_code_text($code);
echo json_encode(array('httpStatusCode' => $code, 'httpStatusText' => $text));
Isso não parece funcionar para todos os códigos de erro HTTP, como 414 "Request-URI Too Long" e sempre cai de volta para 403 Forbidden.