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]
それぞれのステップでどんな結果になりますかね?