apacheは膨大な設定情報があり、難しい。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^/([0-9a-zA-Z]+)/$ /app/main [PT,L]
RewriteRule ^/([0-9a-zA-Z]+)/mode/$ /app/main?mode=1 [PT,L]

とすると、2つ目のRewriteRuleはRewriteCondの条件を踏襲してくれない。

つまり、
/test/以外の/test2/等でアクセスすると1つ目のルールに従ってURLが書き換わるが、
/test/mode/とアクセスすると2つ目のルールがヒットする。

複数のRewriteRuleにRewriteCondを対応付ける方法はないみたいで、
RewriteRuleごとにRewriteCondを指定する必要がある。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^/([0-9a-zA-Z]+)/$ /app/main [PT,L]

RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^/([0-9a-zA-Z]+)/mode/$ /app/main?mode=1 [PT,L]

RewriteCondは複数指定できるが、条件が複雑になってくると、同じ条件であっても
RewriteRuleごとにコピペしなくちゃいけないので、残念だ。。。