RewriteCond %{REQUEST_URI} !^/(design|ui)/ [NC]
RewriteRule ^(.*)$ /public/$1 [L,QSA]
Навскидку ваши правило не исключает саму папку /public. Когда запрашивается что-то внутри /public, условие всё равно проходит и запрос снова переписывается в /public/..., получаем бесконечный редирект и 500 ошибку.
Кроме того полезно перед глобальным правилом проверять существующие файлы/каталоги, чтобы не переписывать статику.
Попробуйте так:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^design(?:/(.*))?$ ui/$1 [L]
RewriteCond %{REQUEST_URI} !^/public/ [NC]
RewriteCond %{REQUEST_URI} !^/(manager|connectors|assets|ui|design)/ [NC]
RewriteRule ^(.*)$ public/$1 [L,QSA]
Да, внутри /public/ должен быть стандартный .htaccess, config.core.php везде должен учесть эти все пути, ну и AllowOverride=All