RewriteRule ^index.(php|html|htm)$ / [R=301,L]
RewriteRule ^([a-z0-9-_]+)/index.(php|html|htm)$ /$1/ [R=301,L]
These are just one rule. With a minimum of changes:
RewriteRule ^([a-z0-9-_]+/)?index\.(php|html?)$ http://www.example.com/$1 [R=301,L,NS]
The target of a redirect always includes the full protocol-plus-host, on the off chance that the user
also gave the wrong form of your domain name. (Search engines do this all the time on purpose.) You will also need a preceding RewriteCond looking at {THE_REQUEST}, since some "index.php" requests are the result of internal rewriting (next rule). Here the [NS] flag alone won't be enough, though it's still a good idea.
([^-]*)-
Surely you don't have URLs that
begin with a hyphen? Or that have two consecutive hyphens? Here you want + rather than - each time.
Far more important:
/?option=$1&i=$2&sid=$3 [L, R=301]
That can't possibly be what you want. As written, that's an external redirect from a pretty URL to an ugly one. I have to guess you really want only an internal rewrite: [L] flag alone. Make sure this rule comes after all external redirects: not just the "index.html" redirect that you've shown, but also the domain-name-canonicalization redirect that you haven't shown.
So what I'd expect here is:
RewriteRule ^([^-]+)-([^-]+)-([^-]+)$ /index.php?option=$1&i=$2&sid=$3 [L]
You can rewrite to a raw directory name (no explicit "index.php") but why made mod_dir do the work?
I don't, however, see anything that would create a 500-class error. At most an infinite redirect-- error message from the browser-- if you've got a corresponding redirect from ugly to pretty elsewhere in the code.
I have only access to ftp
Do you mean you don't have access to your raw logs at all? Or only that the logs require sftp: (mine do) and you don't have the right software? Look around; there are plenty of free options.