WordPress 4.9.5にあげたら「このページにアクセスする権限がありません」エラー

古めのWordpress(たしか4.6)を一気にWordpress 4.9.5をあげました
アップグレードはうまくいったようですが、管理画面へアクセスすると

このページにアクセスする権限がありません

となってしまいました

どれかのプラグインが対応してないのかと、プラグインを1つずつ外してみましたがうまくいきませんでした
(プラグインディレクトリをリネームしてみて)

いろいろ調べた結果、httpsで動かしているサイトだったので、
wp-config.php にhttpsを強制するコードを追記

define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS']='on';
}

これでうまくいきました

参考:
Administration Over SSL « WordPress Codex

SiteGuard WP PluginがNginxに対応していないのでWP Cerberを使ってみた

kusanagiで運用しているWordpressにSiteGuard WP Plugin | 国産WAFのJP-Secureを入れたかったのですが、
Nginxに対応してないということで別の手を考えてみました

実現したかったのは

  • 管理者ログイン画面のURLを変える
  • reCAPTCHA的ななにかを入れる

です

SiteGuard WP PluginをNginxで動くようにする

mod_rewriteの動作をNginxでかけばできるかと思ったのですが、そうでもなさそうなので断念
(動きを把握しきれていません)

別のプラグインを使う

こちらの案を採用しました

WordPress Cerber Security and limit login attempts plugin
が良さそうだったので、こちらをインストール、プラグインを有効化します

MainSettingで

Limit login attempts > Site connection にチェック

Proactive security rules > Redirect dashboard requests にチェック
Proactive security rules > Request wp-login.php にチェック

Custom login page > Custom login URL を入力
Custom login page > Disble wp-login.php にチェック

で、保存
これで、wp-adminやwp-login.phpにアクセスできなくなり、入力したCustom login URLでしかログイン画面が表示されなくなりました

次にログイン画面に reCAPTCHA を加えてみます

GoogleにreCAPTCHA用のkeyを発行してもらわないといけないので、Googleアカウントで
https://www.google.com/recaptcha/admin
にアクセスしてkeyを発行します

必要な情報を入力

キーが発行されます

キーを控えて、Wp Cerber > Antispam のメニューを開きます
控えたキーを入力、
Login form > Enable reCAPTCHA for WordPress login form にチェック
設定を保存します
これで、reCAPTCHA が表示されるようになりました

便利なプラグインです

reCAPTCHA のキーのとり方はこちらを参考
How to set up reCAPTCHA – WordPress Cerber Security and limit login attempts plugin

WordPressをhttps化すると too many redirect が管理画面で発生

WordPressをhttps化したらおかしくなったのでメモ

サーバーはAWS、ssl証明書は導入済み、WordPressを新規にインストール、
管理画面でURLをhttpsに変えたら、too many redirect ..で画面にアクセスできず..
options-general.phpをredirectしまくってるようですが、phpが悪いわけではなさそう

Apacheの設定見なおしたりしましたが、
管理画面での SSL 通信 - WordPress Codex 日本語版

define('FORCE_SSL_ADMIN', true);
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
       $_SERVER['HTTPS']='on';
}

を試したら直りました

WordPressを新しいサーバーで動かしてみる

動いているWordpress v.4.6 を違うサーバーで動かしてみました
はまったところだけ紹介します

Ubuntu 14.04
Apache 2.4
PHP 7.1 -> 5.6へのちほど変更(7.1はWordpressがまだ対応してませんでした)
のサーバーを用意

ディレクトリ一式をコピー
wp_config.phpの一部を新しい環境に合わせて書き換えます

define('DB_NAME', 'database');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'database_address');

データベースのダンプを取って新しいデータベースへインポート
設定を一部変更します
2行目は、Static S3のプラグイン用です

// URL変更
update wp_options set option_value = 'http://sample.com' where option_name = 'siteurl' or option_name = 'home'; 
// Static S3のプラグイン用
update wp_options set option_value  = '/var/www/html/static/' where option_name = 'StaticPress::static dir';
// 画像などのURL変更
UPDATE wp_options SET option_value = replace(option_value, 'http://sample.jp/', 'http://sample.com/') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://sample.jp/', 'http://sample.com/');
UPDATE wp_posts SET post_content = replace(post_content, 'http://sample.jp/', 'http://sample.com/');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://sample.jp/', 'http://sample.com/');

画面にアクセス、エラーが発生

Warning: Parameter 1 to wp_default_styles() expected to be a reference, value given in /var/www/html/wp-includes/plugin.php on line 600
Warning: Parameter 1 to multibyte_patch::wplink_js() expected to be a reference, value given in /var/www/html/wp-includes/plugin.php on line 600
Warning: Parameter 1 to wp_default_scripts() expected to be a reference, value given in /var/www/html/wp-includes/plugin.php on line 600

調べてみるとWordpress 4.6は php 7.1 に対応してないようです
php 5.6に入れ替えると、無事画面が表示されました