Você deve tornar seus padrões o mais específicos possível. Então tente estas regras:
# stop rewriting process if request can be mapped to file or directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# get user pages
RewriteRule ^([^/]+)\.html$ profile.php?user=$1 [L,QSA]
# get paces
RewriteRule ^([^/]+)/([^/]+)/$ place.php?state=$1&city=$2 [L,QSA]
Aqui eu uso
[^/]+
(um ou mais caracteres arbitrários exceto /
). Mas se você quiser apenas permitir caracteres específicos, você deve refletir isso em seus padrões (veja, por exemplo, a proposta do webdestroya). E você também deve certificar-se de usar URIs inequívocos. Você deve desenvolver uma estrutura de URI bem elaborada antes de pensar em regras. Você sabe, URIs legais não mudam .