カスタム401、403、および500エラーページを作成する方法


27

404エラーが発生した場合、404.phpテンプレートファイルを使用してカスタムエラーメッセージをレンダリングできます。これは、テンプレート階層の記事に記載されています。

私の目的は、401、403、および500エラーのカスタムエラーページを作成することです。テーマのディレクトリに401.php、403.php、500.phpファイルを作成しようとしましたが、これは機能しません。

WordPressでカスタム401、403、500エラーページを作成するにはどうすればよいですか?


2
次のコードを開始点として使用してみてください。jesin.tk
Joe

ここでは、403や401エラーなどのエラーページをカスタマイズすることができます既存のプラグインです:http://wordpress.org/plugins/custom-error-pages/あなたがしなければならないのは、インストールしてアクティブです。ただし、プラグインオプションページで指定された.htaccess(またはnginx.conf)ファイルを手動で編集する必要があります。
パイ恋人

回答:


15

エラーページは.HTACCESSを介して提供されます。Apacheを使用している場合は、ErrorDocumentディレクティブを使用してステータスとURLを追加します。

したがって、.htaccessファイルでは次のようになります。

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

以下の機能を使用できます。これにより、HTACCESSファイルに必要なものが動的に追加されます。手動で行うこともできます。

1.ページを追加します。

次に、ダッシュボードに移動して、通常のページ(「ダッシュボード」>「ページ」>「新規」)と同様にページを作成する必要があります。好きなタイトルを付けることができます。スラッグが以下の関数と同じであることを確認してください(スラッグ:エラー401、エラー403、エラー404、エラー500)。また、ページテンプレートを使用して、これらの特定のページに必要なレイアウトとスタイルを作成できます。これについては、WordPress Codexの指示に従ってください。

2.機能を追加します。

// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {

    // Get HTACCESS path & dynamic website url
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Check & prevent writing error pages more than once
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

    if( strpos( $check_file, $this_string ) === false) {

    // Setup Error page locations dynamically
    $error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
    $error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
    $error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
    $error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
    $error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
    $error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;

    // Write the error page locations to HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!

NB !! 上記の機能に関する注意事項

Webサイトを移動するとき、またはURL構造を変更するとき

上記の関数で覚えておくべきことは、HTACCESSファイルに書き込む前にErrorDocumentディレクティブが既に存在するかどうかを確認しますが、更新されたページの場所を反映するようにブログを変更または移動してもErrorDocumentディレクティブは書き換えられません。まず、HTACCESSファイル内の既存のErrorDocumentディレクティブを削除してから、この関数を再実行して新しいディレクティブを作成する必要があります。

フックを修正して関数を1回だけ起動する

もう1つ注意すべきことは、この関数は、initページを読み込むたびにアクションを使用することであり、これは非常に不必要で無駄ですので、プラグインに追加してregister_activation_hookプラグインのアクティベーションで一度だけ起動することをお勧めします

ファイル許可

また、上記の関数を使用するときは.htaccessが書き込み可能であることが必須です。そのため、CHMOD777などの適切なファイル許可があることを確認してください。


これがどのように機能するのかわからないため、手動で.htaccessファイルを編集しましたが、これは機能しません。私はローカルホストでこれをしようとしていますが、これはローカルホストで可能になるはずです、なぜなら私はすべて、サーバー、クライアントにアクセスできるからです。しかし、なぜこれが機能しないのですか?
ソロモンクロソン16

@SolomonClosson、おそらくあなたが私のために書いたプラグインを使って試すことができます。それはあなたのためにすべてを行い、上記のコードに正確に従います:)。公式WordPress.Orgプラグイン
マットロイヤル

@MattRoyalこの関数はうまく機能し、他のhtaccessルールを作成するために使用しています。デフォルトのwp htaccessルールの上に、ファイルの一番上にルールを挿入するにはどうすればよいですか?現時点では、ルールはhtaccessファイルの下部に追加されています。ありがとうございました。
lowtechsun

私は解決策に同意しません:1-ウェブサーバー上で何も777してはいけません!これは一般に悪い習慣であり、大きなセキュリティホールにつながります。2- Webサイトへのすべてのリクエストでファイル書き込みを追加します。書き込みアクションであるため、ファイルにロックを作成し、リクエストの数を減らして同時に応答するときに書き込みを1回だけ許可します。3- Webサイトは、実行するサーバーの依存関係を持たないようにします。たとえば、nginxが使用されているシステムに移行した場合、期待どおりに動作しなくなります。... continues
エドゥアルドオリベイラ

4-エラーを取得するよりクリーンな方法がありますstackoverflow.com/a/34619308/768516
Eduardo Oliveira
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.