どうもseezoo cmsの魔改造野郎イトウキヨノリです。


今日はseezoo cmsをお名前.comの共有ホスティングSDで使った時の話です。

インストールに関しては、特に問題がありません。
DBを作ると「xxxxxxxxxx.cgidb」という謎のホストを指定されますが、
恐る恐るインストールしてみたら、
そこは問題なくインストールできました。
 


が、ハマったのが短縮URLです。
http://domain/index.php/hogehoge/

http://domain/hogehoge/
に短縮する奴ですね。


seezooには予め様々な環境でテストして、
最大公約数的に大丈夫であろうという
mod_rewriteの記述を示してくれます。
これを.htaccessに書き入れてindex.phpと同じ場所にアップすれば、
ほとんどのサーバーでは、
正常に「index.php」を除いたURLで動作してくれます。


が、お名前のSDサーバーではどうやらいくつか問題点があります。

RewriteEngine On
RewriteBase [パス]
RewriteCond $1 !^(index\.php|sitemap.xml|sitemap_ssl.xml|css|js|captcha|uploads|templates|blocks|phpMyAdmin|.+\.gif$|.+\.jpg$|.+\.png$|.+\.js$|.+\.css$|.+\.json$|.+\.ico$|.+\.swf$|.+\.flv$)
RewriteRule ^(.*)$ index.php?__SZREQ__=$1 [QSA,L]

共有ホスティングでPHPがCGIモードで動いている場合は
こんな記述を示してくれます。
CGIモードの場合、PHPのグローバル変数$_SERVER[‘PATH_INFO’]が取得できないことがあり、
その代わりにパスの情報をGETパラメータとしてPHPに渡しています。

また[パス]のところには、
seezooが動いているパスを自動で挿入してくれます。

seezooの場合、ほとんどのサーバーで、
この方法で動きます。


が、お名前.comのSDの場合、このままでは動きません。
まず、「[パス]」の部分、ここは、seezooが適切なパスを取得できないようです。
(サーバーマシンのルートからのフルパスが出力されてしまいます)

どうやら、PHPに渡される環境変数がおかしいようです。
したがって、seezoo側ではどうしようもないですから、
手動で書き換えることになります。

ドキュメントルートでseezooを動かすなら、

RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|sitemap.xml|sitemap_ssl.xml|css|js|captcha|uploads|templates|blocks|phpMyAdmin|.+\.gif$|.+\.jpg$|.+\.png$|.+\.js$|.+\.css$|.+\.json$|.+\.ico$|.+\.swf$|.+\.flv$)
RewriteRule ^(.*)$ index.php?__SZREQ__=$1 [QSA,L]

このような感じですね。


これでもまだ動かない。なぜ…。
どうもパス解決がseezoo内部でできていない。なぜ…

調べる時間がなかったため、原点に立ち返ることに。
むか~し書いた僕の記事を元に
index.phpの冒頭に

if( isset( $_GET['__SZREQ__'] ) ){
    $_SERVER['PATH_INFO'] = $_GET['__SZREQ__'];
}

と書いたら動いた!

あれー。。。seezooにはこのへんの判定スクリプトも入ってるはずなんだけどなぁ。。。


ちなみに同時的に、seezooの根底で動いているフレームワークである、
Codeigniterをインストールする必要があったのですが、
Codeigniterでも同じ問題が。同じ方法で解決。
どうやらお名前.comのSDはクセモンのようです。

SDでCakeの短縮URLが動かない旨のブログを散見しましたが、
おそらく同じような問題だと思われます。
テストは割愛しますが、Cake使いの方も参考になれば。