3

PHPフレームワークでmod_rewriteを使用して、ユーザーフレンドリーなリンクをアプリケーションの1つのメインエントリポイントにリダイレクトしています。私が使用している.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が、何も機能していないようで、デフォルトのブラウザのエラーページが表示されます。

なにが問題ですか?

ありがとうございました。

4

1 に答える 1

3

.htaccessファイルを介してこれを行う簡単な方法はありません。phpコードランドに入ると、apacheは.htaccessファイルとhttpd.confファイルを処理し、フレームワークのフロントコントローラー(この場合はフレームワークのindex.phpファイル)にハンドオフします。

どのフレームワークを使用していますか?

これを処理する最良の方法は、組み込みのapache処理ではなく、フレームワークのエラー処理を使用することです。apache 404は、画像、css、jsなどのフレームワーク以外で提供されるページに適しています。フレームワークには、デフォルトのエラービューを設定するための構成ファイルが必要です。

于 2012-02-20T20:15:22.103 に答える