Использование mod_rewrite с ErrorDocument - PullRequest
3 голосов
/ 21 февраля 2012

Я использую mod_rewrite в моей среде PHP для перенаправления удобных ссылок на одну из основных точек входа в приложение.Файл .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, но ни одна из них, похоже, не сработала, и я получаю ошибку браузера по умолчаниюстр.

Что не так?

Спасибо.

1 Ответ

3 голосов
/ 21 февраля 2012

Нет простого способа сделать это через файл .htaccess. Как только вы попадаете в php code land, apache обработал файлы .htaccess и httpd.conf и перенёс передачу на фронт фреймворков. контроллер - в данном случае файл index.php для фреймворка.

Какие рамки вы используете?

Лучший способ справиться с этим - использовать обработку ошибок фреймворков, а не обработку запеченных в Apache. Apache 404 подходит для любых страниц, не обслуживаемых фреймворком, таких как изображения, CSS, JS и т.д.

...