Sponsored Link

続 XREA無料サーバにWordPress MUを設置 (完結編のつもり)

6月 3rd, 2009 by admin Leave a reply »
修正したエントリを  XREA無料サーバにWordPress MUを設置 (完結編のつもり) で公開しています。

やってみて動かなかった人、ごめんなさい。

このエントリは、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

Advertisement

Leave a Reply