That almost works perfectly!
What you've suggested seems to act as ?p=foo/bar/ which adds an extra, empty value to the array (=>'foo', =>'bar', =>''), unlike what I had before which left me with just ?p=foo/bar (=>'foo', =>'bar'). Not a huge issue, I can get around it.
Also, I seem to remember there was something involving -f or -d, which prevented the rule applying to directories, which allowed me to visit domain.com/images/ which is an actual folder, not a page on the site. (?p=images).
Hoping what I've written makes sense, a storming headache, a technical accident and a sudden realisation you're an idiot does not make for a good poster.