タイトルがかなり長くて訳わからないですね。(笑)
順を追って書くと長くなりますので、先に答えだけ書いておきます。
(うーん、このブログでは技術系Tipsはヤメとこうと思っていたのですが、自分が運用しているサイトで「さくらのレンタルサーバー」を使用しているのはここだけですのでしょうがないですね。初手がTipsとか嫌だなぁ・・・。)
解決策
エラーの原因
wp-cron.php
へのアクセスに際しリダイレクトが発生し301ステータスコードを返すため、処理がストップする。
対処法
wp-cron.php
をリダイレクトの対象から外す。
具体的な方法
htaccess を以下のようにします。3行目の RewriteCond %{REQUEST_URI} !^/wordpress/wp-cron.php$
の部分がキモ。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/wordpress/wp-cron.php$
RewriteCond %{HTTP_HOST} ^[ドメイン名]\.com$ [OR,NC]
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://www.[ドメイン名].com/$1 [R=301,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
導入にあたっては、wp-cron.php のパスを実態に合わせて変更して下さい。
もちろん、ドメイン名などの部分も実態に合わせて下さい。
発生したエラーと経緯
前後してしまいましたが、順を追って説明します。
さくらのレンタルサーバー (スタンダード)におけるSSL
さくらのレンタルサーバーでは、最近SNIベースのSSLが利用できるようになりました。ところが少々癖がある設定で、https(:443)へアクセスするとhttp(:80)へのプロクシとして動作するためサーバーそのものがアクセス元になってしまうとのことです。この状態で、htaccessでwww付きの正規化を行うと、80(リダイレクト)▶443(プロクシ)▶80 というループにハマるようです。
で、回避策として参考にしたのが、「さくらでURL正規化を正しく行うSSLの設定方法 – はるかのひとりごと」こちらの記事。
この通りにやるとちゃんと動くのですが BackWPup が上手く動きません。
BackWPup のエラー
BackWPup の エラー表示 (Information タブ)
Server self connect: The HTTP response test get a false http status (301)Missing or not expected HTTP response headers:
date: Thu, 25 Feb 2016 04:57:45 GMT
server: Apache/2.2.31
location: https://www.yomuna.com/wordpress/wp-cron.php?[パラメータ省略]&backwpup_run=test
content-type: text/html; charset=iso-8859-1
connection: close
「wp-cron.php
をテストで動かしてみたら、想定外の http ステータス(301) が返ってきたので接続切るから!」 ということですね。
てなわけで、wp-cron.php などをそもそもリダイレクトさせないようにしようということで、冒頭の一行を追加したわけです。
修正後の BackWPup の Information タブにおける表示
Server self connect: Response Test O.K.
はい!うまく行きました。
夜間バックアップも自動で行われていましたよ!
おまけ
ついでと言ってはなんですが、wp-admin におく htaccess
もご参考まで。
なお、この例では、htpasswd
ファイルを公開ディレクトリ(www)の上の階層に置いています。
AuthUserFile /home/[ユーザーID]/.htpasswd
AuthType Basic
AuthName "Web access"
Require valid-user
Order deny,allow
<FilesMatch "(async-upload\.php|admin-ajax\.php)$">
Satisfy any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
wp-admin
ディレクトリにBasic認証をかけるんだけど、async-upload.php
とadmin-ajax.php
は認証無しでアクセスできますよ!っていう設定ですね。
なお、ご利用は各自の責任で!
ありがとうございます。
私も知り合いのHPで、さくらのレンタルサーバーを使用していまして、1ヶ月ほど前からSNI SSLで常時SSL化をしていました。
ところがメール投稿(Ktai Entryを使用していましたがPostieに変更しました)が機能しなくなって困っていました(手動でメールを受信させればいいのですが面倒です)。
他のプラグインとの相性かと思い、いろいろやりましたが原因がわからず悩んでいました。
wp-cronに原因があるようなことは分かってきたのですが、根本の原因がわからずにいました。
たまたまこのページに検索が引っかかりまして、もしやと思いやってみたところ見事に直りました。
常時SSL化するのにReally Simple SSLというプラグインを使用していたので、これが原因かと思い、作者にメール(拙い英語で)問い合わせたりして迷惑をかけてしまいました。
貴重な情報をありがとうございます。