I have a problem with my .htaccess redirects. I have both a rewrite rule to remove the \"index.php?/\" from my URLs (I\'m using a PHP framework), and also 301 redirects redirect
Your issue is that this line: RewriteRule ^(.*)$ /index.php?/$1 [L] forces a query parameter in that rewrite. Some hosts are setup this way, one I know of in particular is DreamHost. So, anything that is redirected appears broken.
You can try this
RewriteRule ^dir/file.php$ http://webpage/newdir/file2.php [R=301,L]