いままで普通に動いていたMovabletypeのプラグインであるPerl版ダイナミックパブリッシングが、さくらスタンダードサーバーで常時SSL化したら、ダイナミックパブリッシングできなくなり「キャッシュファイルのコピーに失敗しました」のエラーがでるようになったという話。
さくらサーバーが、無料SSLサーバー証明書 Let's Encryptを提供しはじめたので、タダでSSL化できるならやるかと喜んで実施すると上記のようなエラーがでてこまってしまいました。
さくらのマニュアルに従ってSNI SSLをhtaccessに適用したところでこのエラーがでたので、原因はこいつです。
WordPressを利用せずサイトを作成/公開されている場合 ~SNI SSLを利用~
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{ENV:HTTPS} !on RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
これをそのまま適用すると、MovabletypeでPerl版ダイナミックパブリッシングプラグインつかっている場合、リダイレクトループ?っていうか、ダイナミックパブリッシング自体がrewrite使っているので、二重でrewriteしてしまい上記のようなエラーを吐いてしまうらしい。
「キャッシュファイルのコピーに失敗しました」と言われるから最初phpcacheフォルダのパーミッション設定とか見直していたけど全然関係ないところでした。
.htaccessの方を以下のように修正すればまたPerl版ダイナミックパブリッシングは正常に動きだします。
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{ENV:HTTPS} !on RewriteCond %{REQUEST_URI} !(^/mt/plugins/PerlDynamic/.*$) RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
要するに、プラグインにあるPerlDynamicフォルダを除外してrewriteするように指定してあげればいいようです。