Используйте RewriteCond
как:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(/*)/?$ /index.php?username=$1 [QSA,L]
Эта RewriteCond
сначала проверяет, существует ли файл на самом деле, и если да, то не применяет правило перезаписи. В противном случае перезапишем ваш URL.
Конечно, в зависимости от вашей ситуации есть другие подходы, которые могут быть более подходящими. Но, как правило, вместо того, чтобы проверять, существует ли пользователь в базе данных, сделайте обратное: проверьте, является ли он действительным каталогом / категорией первого уровня, а если не только, то предположите, что это пользователь.
Другим вариантом будет размещение всего статического содержимого в подкаталоге / site / contact / site / about. Это значительно упрощает ведение в том случае, если вы часто будете менять количество разделов контента на сайте. Пример условия перезаписи:
RewriteCond %{REQUEST_URI} !(site/) [NC]
И тогда у вас может быть другое правило перезаписи, которое применяется к site/
на тот случай, если вы хотите сопоставить это с CMS или чем-то еще.
И, наконец, я рекомендую рассмотреть возможность использования веб-фреймворка (Symofony, yii, CodeIgniter), так как, как только вы освоите его, они позволят вам быстрее разрабатывать, а в некоторых случаях встроены гибкие правила переписывания / маршрутизации.