2012/02/11(土)さくらインターネットのmod_rewrite

XOOPS Cube Legacy(XCL)のモジュールpicoでHTMLファイルをラップする設定にしてみた。XUGJのModuleManualsを参考に、picoをcontentsにリネームしてインストール。XOOPS_TRUST_PUSの中にwrapsというフォルダを作り、その中にcontentsフォルダを作って、HTMLファイル(test.htmlという名前にした)を入れる。さくらインターネットはPHPがCGIモードで動いているので、PHP.iniの設定に

cgi.fix_pathinfo = 1

を追加。続いてXOOPS_ROOT_PUS/contentsにある.htaccess.rewrite_wrapsを.htaccessにリネーム。これで、http://forums.cinema1987.org/contents/test.htmlにアクセスすれば、表示されるはずだが、「ファイルが見つかりません」。むむむ、原因が何か分からなかったが、.htaccessの設定が悪いのかもしれない。.htaccess.rewrite_wrapsに書いてあるのは以下の通り。

RewriteEngine on
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path_info=$1 [QSA,L]

調べたら、さくらインターネットではRewriteBaseの設定が必要らしい。いろいろ悩んで、以下のように書き換えた。

RewriteEngine on
 
RewriteBase /modules/contents/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path_info=$1 [QSA,L]

test.htmlにアクセスすると、「ファイルが見つかりません」は出なかったが、画面が真っ白。エンコードが悪いらしい。test.htmlはUTF-8のファイル。Sift_JISで保存しなおしたら、表示された。UTF-8で表示できないのはこちらの設定が悪いのか、picoのUTF-8の処理にバグがあるのかは分からない。

それにしてもmod_rewriteは面白いな。「URLを操作するためのスイス製のアーミーナイフ」と言われるだけのことはある。もっと使いこなせるようにしたい。