Eu aconselharia:
- primeiro teste se for um subdomínio (como você faz) e, se for o caso, faça seus testes em / subdomínio / (subdomínio real)
- se for (www ou admin), recuse tudo o que tentar acessar / subdominio / xxx
Note que removi ( /home/username/public_html
)
Então, isso deve estar perto de:
RewriteEngine on
# first handle subdomains
RewriteCond %{HTTP_HOST} !^(www|admin)\.* [NC]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9]+)\.domain\.com
RewriteCond /home/username/public_html/subdomain/%1 -d
RewriteRule (.*) /subdomain/%1/$1
# then in main domains:
RewriteCond %{HTTP_HOST} ^(www|admin)\.* [NC]
# ...refuse access to subdomain:
RewriteRule ^/subdomain(.*) - [R=404,L]
NB: este é um redirecionamento 404, então você pode fazer seu próprio 404 no início dos rewriterules, algo como:
ErrorDocument 404 /404.php
RewriteEngine on
RewriteRule /404.php - [QSA,L]
... blabla...
E no seu 404.php, manipule o URL para exibir uma mensagem legal:)
Duas dicas:
Por favor, tente usar a diretiva RewriteLog
: ajuda você a rastrear esses problemas:
# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On
Minha ferramenta favorita para verificar o regexp:
link (não se esqueça de escolher ereg (POSIX) em vez de preg (PCRE)!)