ちょっと野暮用で(という言い方も変だが)、
さくらインターネット(スタンダード)にSeezooCMSをインストールする必要があった。
公式のインストール方法を元に設置まで進んで、
いざインストール設定をと思うと進めない。
???
と思い、/index.phpに直接アクセスしたら、
インストーラーを見ることができたので、
なーんだと思ってインストール完了。
さぁ、じゃあ使おうじゃないかと思うと、
ここでさっきの問題が何を意味しているかわかった。
mod_rewriteの動作が変!!!orz
最初はmod_rewriteの動作がなのかなと、
.htaccess周りをずっと見ていたのだけれど、
どうもなんか違う。.htaccessの書き方は正常だ。。。
というようなことをTwitter嘆いていたら、
@longkey1さんが
・ルーティングあたりに問題がある。
・mod_rewrite後PHPにPATH_INFOが渡されないのが問題かも。
とアドバイスを受ける。
!!!
初めてCGIモードでPHPを触ったのですが、
CGIモードの場合、PATH_INFO周りの扱いが非常に面倒になるのですね…。
知りませんでした。。。
でも共有ホスティングではCGIモードがメインの日本では、
知らなかったでは済まされない事態…@longkey1さんありがとうございます。。。
私が行った対処方です。
まず、seezoo CMSデフォルトのサンプルでは、.htaccessは、
RewriteEngine On 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/$1 [L]
こんな感じですが、これを
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?__REQ__=$1 [L]
こんな風にします。@_tk84さんの情報によると、さくらの場合は、基本的にRewriteBaseの設定は行った方が良いようです。ありがとう!_tk84さん。
次に、/index.phpの冒頭に、次のPHPスクリプトを埋めます。
if( isset( $_GET['__REQ__'] ) ){
$_SERVER['PATH_INFO'] = $_GET['__REQ__'];
}
ここまでの流れを説明すると、
URLのパス情報を「__REQ__」というリクエストで送信して、
それを受け取ったindex.phpが、
$_GET['__REQ__']を$_SERVER['PATH_INFO'] に代入して、
ルーティングを成功させようという魂胆。
これでいけるか。と思ったら、まだ変。。。
改めてCodeIgniterのルーティングについて調べる。
すると、CodeIgniterでは、何を基準にルーティングするのかを決める設定があって、
デフォルト状態ではそれが「auto」になっているという話。
それを明確に「PATH_INFO」を基準にせよとすれば、
うまく行くっぽい!
/system/application/config/config.php
の次の箇所
$config['uri_protocol'] = "AUTO";
を
$config['uri_protocol'] = "PATH_INFO";
と書き換えた。
これで成功!めでたしめでたし。
あとはつくるだけ。
@longkey1さん、@_tk84さん、ありがとうございます!
Comment feed