
Eu tinha uma configuração de subdomínio no cpanel antes (sub.domain.com para redirecionar para domain.com/sub/) e de repente hoje percebi que ele estava reescrevendo a URL no navegador para www.domain.com/sub/ em vez de apenas apenas deixando como sub.domain.com. Eu não tinha certeza qual era o problema, mas decidi excluir meu subdomínio e recriá-lo no cpanel. Agora só posso acessá-lo acessando www.sub.domain.com (sub.domain.com gera um erro de servidor não encontrado).
EDIT: O problema parece estar no arquivo .htaccess. Depois de excluí-lo, as coisas voltaram ao normal. Porém agora meu novo problema é como configurar o arquivo .htaccess corretamente. Eu o ajustei originalmente para tentar realizar o seguinte:
Eu tenho três pastas, live, staging e dev:
1) As solicitações de domínio.com ou www.domínio.com são direcionadas para domínio.com/live (e o URL que o usuário vê é sempre reescrito como www.domínio.com).
2) Solicitações para staging.domain.com e dev.domain.com ou direcionadas para domain.com/staging e domain.com/dev, respectivamente, e o usuário vê staging.domain.com ou dev.domain.com no navegador .
3) Quaisquer subdomínios em geral não são reescritos pelo navegador quando eu os adiciono no cpanel.
Meu arquivo .htaccess atual atinge o número 1 perfeitamente, mas reescreve staging.domain.com para www.domain.com/staging e assim por diante.
RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1
Responder1
Ajustei a lógica do meu código original e parece ter uma solução funcional viável. Todos os testes que fiz foram bem-sucedidos. Se alguém encontrar alguma falha no código ou como ele pode ser otimizado para se adequar às condições apresentadas na pergunta original, entre em contato. Tenho pouca experiência em trabalhar com reescritas. Obrigado.
Código de trabalho:
# REDIRECTS
#
# Add www in front of all URLs except subdomains
#
RewriteCond %{HTTP_HOST} ^domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
RewriteRule ^$ /index.html
#
# Add forward slash at end of www URLs
#
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.domain.com/$1/ [R=301,L]
#
# Forward requests to live folder
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1
*Observação: não sei por que a última parte do código não redireciona URLs de subdomínio para uma pasta ativa. Funciona do jeito que eu quero, só não sei por que ^_^;