答えは、RewriteRuleディレクティブで使用されるLフラグに関する次の段落にあると思います。
.htaccessファイルまたはセクションでRewriteRuleを使用している場合は、ルールがどのように処理されるかをある程度理解しておくことが重要です。これの単純化された形式は、ルールが処理されると、書き換えられた要求がURL解析エンジンに戻され、それを使用して実行できるようにすることです。書き換えられた要求が処理されるときに、.htaccessファイルまたはセクションが再度検出される可能性があります。そのため、ルールセットが最初から再実行される可能性があります。最も一般的には、これは、ルールの1つがリダイレクト(内部または外部)を引き起こし、要求プロセスを最初からやり直す場合に発生します。
リライトが実行された後、どういうわけか制御がURL解析エンジンに戻され、ルールが再度実行されるということが起こると思います。
最後のルールにいくつかの書き換え条件を追加することで、この動作を防ぐことができます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule new/?$ new.php [NC,L]
RewriteRule thanks(.*)$ thankyou.php [NC,L]
# Only rewrite to index.php if the current request is not for an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>