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を操作するためのスイス製のアーミーナイフ」と言われるだけのことはある。もっと使いこなせるようにしたい。