Давай по пунктам разложем
RewriteEngine On
RewriteBase /
тут все понятно
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ site.ru/$1 [R=301,L]
тут уже пипец. начинается уже 2 ошибки хотя и не критичные
Это будем считать редирект на без www давай чтоб не паритсья я тебе дам редирект который сработает без указаиня домена и выглядящий менее убого.
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ [NC]
RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ site.ru/$1 [L,R=301]
C виду выглядет как полная хрень, что ты именно пытался этим сделать ?
RewriteCond %{QUERY_STRING} ^.+$
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ site.ru/? [R=301,L]
это сколь я понимаю опять убогое продолжение самописаного чпу в добавок с ? в конце
распиши что именно по твоему мнению делают каждые блоки, мы приведем в чувства существующее ... ммм как сказать "строение"
А потом будем думать что же было не так.