Вы можете попробовать использовать условие:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p=profile&u=$1 [L,QSA]
-f и -d являются флагами для «является файлом» и «является каталогом» соответственно. ! отрицает это. Ваша перезапись должна происходить только для URL, которые на самом деле не существуют в вашем веб-корне. Возможно, вы захотите добавить начальное условие, чтобы оно соответствовало вашему формату имени пользователя, чтобы не топать каждую потенциальную ошибку 404.
Вы также можете добавить следующее:
RewriteCond %{REQUEST_URI} ^/[a-zA-Z0-9_-]+/?$
Так что вы будете соответствовать / adsfasdfasdf вместо / что-то / что / не существует