mod_rewriteでblosxom.cgiを隠そうとしたことのまとめ
blosxom.org: URLからCGIのファイル名を隠すを見て、このブログでもやってみようと思ったわけです。
具体的には、http://nodaguti.usamimi.info/blosxom/ にアクセスすれば http://nodaguti.usamimi.info/cgi-bin/blosxom/blosxom.cgi/ を表示するようにするために、まず最初に
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^blosxom(.*)$ /cgi-bin/blosxom/blosxom.cgi$1 [L,QSA]
と書いてみた。 しかし、これだと http://nodaguti.usamimi.info/blosxom/other/ のようにカテゴリごとや年・月ごとの表示はうまくいくものの、 http://nodaguti.usamimi.info/blosxom/other/guide.htm のように個々の記事へアクセスしようとするとなぜか500になってしまう。
その後いろいろ調査した結果、どうやら blosxom.cgi/〜 のような.cgiを含むURLを書き換えるのがうまくいかないようだった。(http://nodaguti.usamimi.info/index.htmlとかの普通のページへの書き換えはうまくいく)
なので、書き換えじゃなくてリダイレクトだとなぜかうまくいくので、今は以下のようにしてしのいでる。
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^blosxom(.*)\.(.*)$ http://nodaguti.usamimi.info/cgi-bin/blosxom/blosxom.cgi$1.$2 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^blosxom(.*)$ /cgi-bin/blosxom/blosxom.cgi$1 [L,QSA]
でもこれだとリダイレクトはされるかわりにロケーションバーに長いほうのURLが表示されちゃうんだよね...
できれば短いhttp://nodaguti.usamimi.info/blosxom/カテゴリ名/記事名.htmの方でリンクして欲しい。
追記(2009/12/27)。結局、blosxom.cgiを隠すのは諦めて、せめてcgi-binディレクトリを隠すだけで妥協することにした。すなわち、
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^blosxom(.*)$ /cgi-bin/blosxom$1 [L,QSA]
こんな感じ。