web-dev-qa-db-ja.com

$ _SERVER ['HTTPS'] = 'on'に設定すると、wp-adminにアクセスできなくなります。

まず私のサーバーはロードバランサーの後ろに座っています。私のSSL証明書はロードバランサーにあり、HTTPSを処理します。ポート443で受信したデータは、ポート80でHTTPを使用してWordpressサーバーに転送されます。

しかし、wordpressとphpは私のサーバー設定を知りません。これによりブラウザは私の有効なSSL証明書の有効性について疑わしくなります。

これを修正するために、functions.phpに次のコードを追加しました。私はこの コードをここで見つけました そして codexは同意します

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']='on';
}

これはフロントエンドではうまく機能しますが、今や/ wp-admin /は私の管理者アカウントでもアクセスできません。ログイン後、「申し訳ありませんが、このページにアクセスすることはできません」というメッセージが表示されます。その他の支援はありません。

そのため、wp-adminフォルダを検索したところ、「申し訳ありませんが、このページへのアクセスは許可されていません」という単語が見つかりました。 17回表示されます。

これらのエラーメッセージのほとんどは、ユーザーのアクセス許可の確認に関連付けられています。

HTTPSを「オン」にして管理者アクセス権を保持するにはどうすればよいですか。

概要:

  • Functions.phpにHTTP_X_FORWARDED_PROTOロジックを追加する前に、wp-admin /にアクセスできます。
  • HTTP.X_FORWARDED_PROTOロジックをfunctions.phpに追加した後、wp-admin /にアクセスできない
  • Functions.phpにHTTP_X_FORWARDED_PROTOロジックを削除した後、私はwp-admin /にアクセスできない

更新:

私は、エラーメッセージがwp-admin/menu.phpと一番下のこのコードの塊から来ていることを発見しました。このファイルであることを確認するために、エラーの最後にmenu.phpを追加しました。

if ( !user_can_access_admin_page() ) {

    /**
     * Fires when access to an admin page is denied.
     *
     * @since 2.5.0
     */
    do_action( 'admin_page_access_denied' );

    wp_die( __( 'Sorry, you are not allowed to access this page. menu.php'), 403 );
}

私はまだこれを修正する方法を理解していません。

11
nu everest

User42826に感謝します。

コーデックスによると:

WordPressがSSLを提供するリバースプロキシの背後でホストされているが、SSLなしでそれ自体がホストされている場合、これらのオプションは最初にリクエストを無限のリダイレクトループに送ります。これを避けるためには、HTTP_X_FORWARDED_PROTOヘッダを認識するようにWordPressを設定することができます(リバースプロキシがそのヘッダを設定するように正しく設定されていると仮定して)。

次の操作で問題を解決できます。

これをwp-config.phpに追加してください。 ( コーデックス参照

/* SSL Settings */
define('FORCE_SSL_ADMIN', true);

/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}

不要なので、これをfunctions.phpから削除してください。

/**
 * Make PHP HTTPS aware via HTTP_X_FORWARDED_PROTO
 */
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS']='on';
}
15
nu everest