^(.*)/index.php or some variant, but it never works because .* is greedy and doesn't stop before getting through index.php.
I tried the negative assertion
^(.*)(?!index.php), but again .* was too greedy. The fact that this failed was really surprising because when I just did /(?!index.php), every slash matched exceopt the one before index.php. You'd think using the * would help that along.