@jondaley: let's move on from the GET caching, the bottom line is we want mod_rewrite to work better - not stop /?p= being redirected to its permalink.
As far as I can see, there are three rewrite conditions that are suspect and should probably be optimized. These are:
RewriteCond %{REQUEST_URI} !^.*[^/]$
RewriteCond %{REQUEST_URI} !^.*//.*$
RewriteCond %{QUERY_STRING} !.*=.*
So what I'm trying to understand is what does each check?
1) Checks if the URI ends with a slash? If so, then surely */$ is enough?
2) Checks if the URI ends with double-slash? What for and why for? And if that's needed, then surely !*//$ is enough?
3) Checks if there is a query string? Or if the query string is empty? I don't get that one
I'm also curious what's HTTP:profile -- I could not find anything about it anywhere.