Как исключить «404.php» из соответствия этому правилу перезаписи?
RewriteRule ^([0-9]+)/?.*$ /news.php?sid=$1
Просто перехватите его с помощью предыдущего правила, для которого установлен последний флаг:
RewriteRule ^ (404.php) $ $ 1 [NC, L]
RewriteRule ^ ([0-9] +) /?.*$ /news.php?sid=$1 [NC, L]
RewriteCond %{REQUEST_URI} !^/404\.php$ RewriteRule ^([0-9]+)/?.*$ /news.php?sid=$1
RewriteCond используется для сопоставления URI запроса, к которым должно применяться следующее правило.
Подробнее о переменных заголовка, которые можно использовать в выражениях RewriteCond, можно узнать здесь: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond
Не проверено, но должно работать:
RewriteCond %{REQUEST_URI} !^/404\.php RewriteRule ^([0-9]+)/?.*$ /news.php?sid=$1