Studencheskie Programmisty

mod_rewriteでblosxom.cgiを隠そうとしたことのまとめ

Dec 24, 2009

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]

こんな感じ。