/ / Como redirecionar raiz para o subdiretório usando .htaccess - regex, apache, .htaccess, mod-rewrite, redirect

Como redirecionar raiz para o subdiretório usando .htaccess-regex, apache, .htaccess, mod-rewrite, redirect

No momento, estou usando hospedagem compartilhada e não tenho como colocar meus arquivos fora da pasta "public_html".

Para contornar isso, eu quero reescrever meu site "raiz" para um subdiretório usando o script abaixo em um arquivo .htaccess:

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteRule ^(.*)$ /subdir/$1

O que funciona muito bem, exceto quando eu navego para www.example.com/subdir/. Esse URL não redireciona para nenhum lugar, ele simplesmente exibe o subdiretório. Este é um problema para URLs relativos e tal.

Existe uma maneira de continuar reescrevendo minha raiz para um subdiretório enquanto também reescrevendo www.example.com/subdir/ para www.example.com?

Respostas:

1 para resposta № 1

Você pode usar esta regra no root .htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/subdir/ [NC]
RewriteRule ^(.*)$ subdir/$1 [L]

E use essa regra em /subdir/.htaccess:

RewriteEngine On
RewriteBase /subdir/

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{THE_REQUEST} /subdir/(S*)s
RewriteRule ^ /%1? [R=302,L,NE]