Comece com regras que façam o que você quer e combine-as. Na pergunta você tem 3 requisitos e regras que cobrem apenas dois deles - há uma regra faltando.
Uma dica importante é escrever regras que usem uma correspondência positiva (começa com foo) e não uma correspondência negativa (inicia com qualquer coisa exceto foo), caso contrário, são necessárias exclusões e você deve adicionar ao seu conjunto de regras no futuro. quebrar.
Redirect example.notcom para www.example.com
Existem muitos exemplos para isso, neste caso particular:
RewriteCond %{HTTP_HOST} ^example
RewriteRule ^ http://www.example.com%{REQUEST_URI} [R=301,L]
Não importa se são example.com
, example.net
ou example.org
- todos começam com o exemplo - correspondem a solicitações de domínio não-www e redirecionam para www.example.com
Redirecionar www.example.notcom para www.example.com
Para isso, use um lookahead negativo para excluir www.example.com
:
RewriteCond %{HTTP_HOST} ^www\.example\.(?!com)$
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
Ou seja. corresponde a qualquer host começando com www.example, que não termina com .com
Redirecionar webtest.example.notcom para webtest.example.com
Da mesma forma, usando um lookahead negativo, isso pode ser normalizado:
# capture the subdomain, and match hosts that don't end with .com
RewriteCond %{HTTP_HOST} ^webtest\.example\.(?!com)
RewriteRule ^ http://webtest.example.com%{REQUEST_URI} [L,R=301]
Ou seja. corresponde a qualquer host que comece com webtest.example, que não termina com .com
As regras podem ser combinadas?
Os que estão em um subdomínio podem ser:
RewriteCond %{HTTP_HOST} ^(www|webtest)\.example\.(?!com)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [L,R=301]
O primeiro, no entanto, não pode ser facilmente incluído aqui (pelo menos, não consigo pensar em uma maneira trivial de fazê-lo).
Todos juntos:
O resultado final é, portanto:
# Redirect no-www requests to www.example.com
RewriteCond %{HTTP_HOST} ^example
RewriteRule ^ http://www.example.com%{REQUEST_URI} [R=301,L]
# Redirect requests on the wrong tld to .com
RewriteCond %{HTTP_HOST} ^(www|webtest)\.example\.(?!com)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [L,R=301]