Примерно так:
RewriteEngine On
# Redirect www to non-www
RewriteCond %{HTTP_HOST} ^www\.site\.ru [NC]
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
# Remove trailing slash, question mark, and double slashes in URL
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule ^(.*)/$ https://site.ru/$1 [R=301,L]
# Remove query string if it's empty
RewriteCond %{THE_REQUEST} ^[^\\s]+\s+[^?]*?\?
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule .? https://site.ru%{REQUEST_URI}? [R=301,L]
# Remove double slashes
RewriteCond %{THE_REQUEST} //
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule .* https://site.ru/$0 [R=301,L]
# Redirect home, index, and URLs with trailing slash or query string to main page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*(home|index)(\.htm?|\.html?|\.php)?\ HTTP/
RewriteCond %{REQUEST_URI} !^/administrator/
RewriteRule ^.*$ https://site.ru/ [R=301,L]
Изменения и объединение правил
1.
Редирект с www на non-www теперь идет в самом начале, чтобы предотвратить промежуточные редиректы с `www`.
2.
Правила для удаления конечного слэша и двойных слэшей теперь не конфликтуют, так как порядок проверки правил происходит до их выполнения, что позволяет обрабатывать дублирующие слэши и делать это в одном шаге.
3. Все условия, касающиеся административной части (`!^/administrator/`), оставлены для всех правил, чтобы избежать неправильных редиректов на одну из страниц админки.
Таким образом, теперь при нахождении URL с www или ненужными символами, будет происходить единый шаг перенаправления на правильный адрес без промежуточных этапов.