Вы хотите, чтобы ваше правило не переписывало URL-адреса, уже начинающиеся с main, чтобы не допустить его зацикливания, например:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^main/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^/]+/(.*)$ /main/$1 [L]
[L] на самом деле не означает, что вы думаете [L] должно означать в контексте файла .htaccess.
Вы должны иметь возможность получить исходный URL-адрес, запрашиваемый из переменной среды REQUEST_URI, но обычно нужно передать слаг в цель какПолучите переменную.
RewriteRule ^([^/]+)/(.*)$ /main/$2?user=$1 [QSA,L]
Или передайте все в один скрипт, который интерпретирует URL-адрес и находит верное содержимое для возврата:
RewriteRule ^([^/]+)/(.*)$ /main/index.php?user=$1&path=$2 [QSA,L]