このエントリは、6/3に公開したエントリですが、
8/4編集操作しようと思ったら、ヘッダがtext/htmlに戻っている様子です。
Ajaxのエラー、画像表示ができない。など、解決したと思っていたものが、元に戻ってしまいました
チェックしなおしてみます。しばらくお待ちください。
wordPress MU を セーフモードのかかった無料XREAサーバにインストールする場合
大まかな動作は、ほぼ大丈夫でも、細かい部分で、いろいろと不具合が出たりします。
以前のエントリで紹介したphpをCGIとして動作させる方法で
AddHandler application/x-httpd-phpcgi .php
を紹介しています。
これは、モジュール版では、セーフモード環境下でディレクトリの作成ができなくなるなどの制約を、突破するための方法でした。
確かに、アップロードなどができるようになるのですが、その反面、CGIモードで動作させた場合に、利用できなくなるPHP関数も存在し、ルートにある.htaccessに追記しただけでは、CGIモードで動作するファイルが多すぎて、影響を受けるようになります。
具体的な事例としては、このサイトで起きていた 「リロードすると画像が表示されなくなる」という現象などがあります
wordPressは、アップロードした画像を、Userの画像ディレクトリに静的なファイルとして、保存しますが、それをそのまま表示しているわけではありませんでした。
ブログから、画像のURLは、見かけ上その静的なリンクに向けてあります。このため、対応する画像を画像アプリで開くと、正常に表示されます。しかし、画像URIにアクセスすると、画像としてではなく、text/htmlとして文字列として、表示されるといった現象が発生します。
なぜ、そのような現象が発生するのか?
実は、wordPressMU特有の、処理が行われていることに起因します。
rootにある.htaccess のmod_rewriteが、その画像をwp-content/blogs.phpで、静的な画像ファイルを再評価して、ヘッダをつけて送り出すという機構が存在するため、cgiモードで動作していると、画像は、text/htmlとして表示される仕組みになっています。
さらに、もうひとつの伏線があります。XREA無料サーバに由来する部分です。
それは、mod_headerです。XREA無料サーバは、広告挿入をこの機能で実行しているので、phpなどのファイルに対してすべて、text/htmlヘッダーをつけようとします。
だから、blogs.phpは、モジュールPHPとして動作し、画像ヘッダーを出すために、広告挿入を停止する必要があります。
mod_rewriteで書き換えられる形式的な、画像ファイル名に対しても、広告挿入を停止する必要があります。
したがって、
RemoveHandler application/x-httpd-phpcgi .php
みたいな事をやってみても対策にはならず、、、(泣)
このため、
ルート.htaccessには以下を追記
LayoutIgnoreURI *.gif
LayoutIgnoreURI *.png
LayoutIgnoreURI *.jpg
wp-admin/.htaccess
<files async-upload.php>
AddHandler application/x-httpd-phpcgi .php
</files>
<Files plugin-install.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
<Files update.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
<Files update-core.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
<files upload.php>
AddHandler application/x-httpd-phpcgi .php
</files>
#import
<files admin.php>
AddHandler application/x-httpd-phpcgi .php
</files>
wp-content/.htaccess
LayoutIgnoreURI blogs.php
の設定は必要そうです
このように、無料サーバへのインストールは、coreserverへのインストールと異なる設定が必要になるようです。
とても面倒な設定になっていますが、
cgiとして動作させるPHPファイルは、きっちり決め打ちする必要があり、
それを怠ると、単に画像の部分だけでなく、Ajaxレスポンスなどもエラーを発生するので、
手数を惜しまないようにしたほうがいいかもしれません。
参考までに、2.6.5のものですが、phpのヘッダ関数を使っているファイルリストを添付しておきます。
意外と多いのでびっくりしました自分。
参考:セーフモードによる制限と対処方法 wordpress codex