Ваш код генерирует цикл перенаправления. Кроме того, вам не нужно избегать косых черт на целях.
Вы можете объединить все внутри своего блока виртуального хоста (быстрее, чем с помощью htaccess):
RewriteEngine On
# force https
RewriteCond %{HTTPS} off [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# force www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# redirect root directory to /site/
RewriteRule ^/?$ /site/ [R=301,L]
Конечно, вы будетесмотрите цепочку перенаправления, например, http://domain.tld/
, так как сначала она будет перенаправлена на https://domain.tld/
, затем на https://www.domain.tld/
и, наконец, на https://www.domain/tld/site/
. Это отлично. Однако, если вы действительно хотите обрабатывать все одним перенаправлением, вы можете. Но он будет менее общим.
Например, вы в конечном итоге будете придерживаться следующих правил:
RewriteEngine On
# force root directory to /site/ (https+www)
RewriteRule ^/?$ https://www.domain.com.br/site/ [R=301,L]
# force any other pages to https+www if not the case already
RewriteCond %{HTTPS} off [NC,OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.domain.com.br%{REQUEST_URI} [R=301,L]