Does the content of your new Wordpress htaccess file come
before,
after or
instead of your previously existing htaccess? Order is important.
1> www.example.com/blog - does not append the ending trailing slash automatically and gives an error page.
And there's your Reason #82 for not using the !-f and !-d boilerplate. They're preventing mod_dir from doing its job. It normally executes after* mod_rewrite; one of its two specific jobs is the Directory Slash Redirect.
:: detour to pore over RewriteBase explanation for at least the eleventh time ::
Ah ha!
The RewriteBase directive specifies the URL prefix to be used for per-directory (htaccess) RewriteRule directives that substitute a relative path.
In practice that means: Rewrites that don't begin with a slash (or with full protocol-plus-domain). But since your Rewrites never
do begin a slashless relative path, the line does nothing.
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.example.com/ [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.example.com/ [R=301,L]
This is all in the wrong order. Within each category-- F, G, Redirect, Rewrite-- go from most specific to most general. It also illustrates once again why you should leave a blank line after each Rule:
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.example.com/ [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://www.example.com/ [R=301,L]
The first rule makes the second rule superfluous, because you have already redirected everything to www. But I think you must have left out its Condition while copying & pasting, because it would otherwise lead to an infinite (external) redirect loop until the user's browser steps in. And you can combine your two indexes as \.(html|php). In fact there's a post about this same issue just a few threads down.
* I detoured to check. MAMP doesn't go in exactly the same order as my live site, but I'll trust it on this one.