NTT コミュニケーションズの「Biz ホスティング」というホスティングサービスを使うと、SOY CMS がうまく動かない・・・という相談がお客さんからあったので調べてみた。
俺自身は SOY という CMS は使ったことがない。
ネットショップを開いたりする時に使いやすい CMS だそうだ。
お客さんのところで色々なサーバで稼働実績があるらしいのだが、なぜか、他のサイトと同じようにインストールしても、トップページ以外のページに移動しようとすると、
Not Found
The requested URL /usr/home/hogehoge/htdocs/www/index.php was not found on this server.
とエラーが表示されて駄目・・・という状況。
ググってみると、「OCN のホスティングサーバで SOY がうまく動かない」という書き込みはけっこうあって、でも、ちゃんと解決策まで書いてあるところは見つけられなかった。
まあ、404 Not Found を出すにしても、URL ではなく、サーバ上の生のパスが表示されてるのが既に怪しい(^^;
SOY の場合、トップページ以外の全てのページへのアクセスが一旦 index.php に向かうように、
# @generated by SOY CMS at 2011-05-10 09:33:57
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.htm !-f
RewriteCond %{REQUEST_URI} !/index.php/
RewriteRule ^(.*)$ index.php?pathinfo=$1&%{QUERY_STRING} [L]
こういう内容の .htaccess が DocumentRoot にセットされる。
例えば、http://www.exsample.jp/hogehoge.php?hunya=999 のようなアクセスがあれば、自動的に http://www.exsample.jp/index.php?pathinfo=/hogehoge.php&hunya=999 みたいな感じにリダイレクトするわけだね。
なのに、
The requested URL /index.php was not found on this server.
ではなく、
The requested URL /usr/home/hogehoge/htdocs/www/index.php was not found on this server.
となってるのがもう駄目駄目。
これ、他のサーバではちゃんと動いてるらしいから、OCN のサーバの何やら独自仕様なのかね?
index.php という相対パスに対して、ローカルファイルのパスを付け足して、リダイレクト先としているようだ。
ということで、試しに .htaccess の一番下の行を、
RewriteRule ^(.*)$ /index.php?pathinfo=$1&%{QUERY_STRING} [L]
という具合に絶対パスとしてみた。
そうしたら、パスの補完はされず、素直に http://www.exsample.jp/index.php にリダイレクトされたようで、ばっちりどのページでも表示されるようになった。
あらら。
その後、この辺を重点的にググってみたら、リダイレクト先の指定を、
RewriteRule ^(.*)$ http://www.exsample.jp/index.php?pathinfo=$1&%{QUERY_STRING} [L]
みたいに、http から書け・・・という解決策もあった。
つまり、これも、変なファイルパスを補完させないってことで、俺の修正内容と一緒だな。
つーことで、SOY CMS を OCN のサーバで使う人は、.htaccess の修正がキモですぞ。