At first glance, I'd say you're a victim of the greedy and ambiguous ".*" regex pattern here.
A pattern of ^(.*)/$ as specified in your first rule will match any and all of these:
So, your first rule catches everything, giving a script call of /index.php?id=news/2
I suggest putting your script rewriting rules in order from most-specific to least specific, and using unambiguous regex patterns wherever possible -- and that means "most of the time." -- In addition to preventing unexpected matches and the resulting problems, they also offer a very-significant processing-speed advantage in many cases.
Use the [L] flag on every RewriteRule, unless you have a good reason not to do so.
Your ErrorDocument directive syntax is incorrect, and will result in a 302 redirect instead of a 404 response -- See the ErrorDocument directive in the Apache core directives documentation.
Also, you'll be much happier with yourself 3 years from now if you comment your code today. Trust me on this one... :)