mod_rewrite

http://www.hatena.ne.jp/1122115909
質問に答えたのですが、どうも核心をついていなかったようで申し訳ないかぎり。
トラックバック打ちつつ、こちらの方でちょっと書いてみたりします。


とはいうものの、あれ以上のことは見当がつかないのですよね……。(だから回答せずに日記に書くわけですが)


先の回答で書いたように、本当はRewriteLogなりアクセスログなり見てみるのが早道だと思うのですが、レンタルサーバだと(たぶん)見られないですし、1つ1つ試してみるしかないように思います。

とにかく.htaccessが読み込まれていることを確認する

何でも良いのですが、とにかく設定してみます。例えばDirectoryIndex。

DirectoryIndex hello.html

これで、http://www.example.com/ に飛ばしてみて http://www.example.com/hello.html を表示することを確認する。
index.php とかだと、さくらではデフォルトで指定されているのでテストになりません。
これが通らないようだと、そもそも .htaccess が有効になっていない可能性が大です。
FTPがASCII MODEになっていることや、ファイル名が間違っていないことなど基本的なところを要確認。

簡単なリライトルールでやってみる

DirectoryIndexもRewriteCondもはずして簡単な.htaccessにしてみる。
RewriteBaseを指定して変換ルールは少しでも簡単にしておく。
と言うわけで、以下のような.htaccessで試してみる。

RewriteEngine on
RewriteBase /
RewriteRule .* hello.html [L]

これで、http://www.example.com/abc/XXXXXX.html へのアクセスが http://www.example.com/hello.html に向くかどうか確認。

CGIの引数をつけてみる

次に試してみるのはこれ。

RewriteEngine on
RewriteBase /
RewriteRule .* index.php?abc=XXXXXX [L]

これで、http://www.example.com/abc/XXXXXX.html へのアクセスが http://www.example.com/index.php?abc=XXXXXX に向くかどうか確認。

CGIの引数をURLから引っ張ってくる

次に試してみるのはこれ。核心。

RewriteEngine on
RewriteBase /
RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z]+)\.html$ index.php?$1=$2 [L]

これで、http://www.example.com/abc/XXXXXX.html へのアクセスが http://www.example.com/index.php?abc=XXXXXX に向くかどうか確認。

最終形

DirectoryIndexはとりあえず関係ないので除くと、次が最終形です。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z]+)\.html$ index.php?$1=$2 [L]


それぞれのステップでどんな結果になりますかね?