質問: WordPressを利用しようと触っているうちに、Apacheのhtaccessファイルについて疑問を持ちました。 htaccessに関係する、調べてもよく分からなかった点、まとめて質問させてください。 ネットでよく見かける、「index.html有りを、無しに統一する」サンプルコードです。 ``` RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://www.example.com/$1 [R=301,L] ``` まず1つ目 RewriteCondの行の後半部分の.(ドット)がエスケープされていません。 それともこの書き方が正しくて私が間違っているのか、ネットを検索してもエスケープ無しのサイトが多すぎて分かりません。 確かに意図した動きはしてくれていますが... 2つ目 RewriteRuleの変換先の$1は、変換元の(.*)の部分を見に行くと思っているのですが違うのでしょうか? http://www.example.com/index.htmlにアクセスした場合、 http://www.example.com/http://www.example.com/となってしまうような気がします。 最後に RewriteBaseを使ってシンプルに書きたいのですが、以下のコードの■■に入る良い書き方はありますか? ``` RewriteEngine on RewriteBase /test_dir/test_subdir/ RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ ■■$1 [R=301,L] ``` /test_dir/test_subdir/index.htmlの、index.htmlをただ消したいだけなのです。 宜しくお願いします。
回答: 期待している回答になっているか不明ですが。。。 > > まず1つ目 > > > 正規表現で、厳密に判定するのであればエスケープするのが正解だと思います。 (ファイル名の指定なので、表記方法が曖昧になっているのかもしれません) ``` RewriteCond %{THE_REQUEST} ^.*/index\.html RewriteRule ^(.*)index\.html$ http://www.example.com/$1 [R=301,L] ``` > > 2つ目 > > > (ざっくり書いてしまうと) 「RewriteRule」でチェックする対象は、URL の `http://www.example.com` の後ろになります。 `http://www.example.com/index.html` の場合、 RewriteRule の検索対象は `/index.html` が対象になります。 最後の質問に関しては、普段、気にしていないので明確なアドバイスができません。 ``` RewriteRule ^(.*)index\.html$ http://%{HTTP_HOST}/$1 [R=301,L] ```