Como redirecionar o não-www para o www sem codificar usando o .htaccess?

4
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

... causa um redirecionamento 301 perfeito, sem codificação, de "www para não-www", como seria exatamente o oposto?

EDITAR:

De acordo com a postagem do Prix, eu mudei o arquivo .htaccess para o seguinte:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
  RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
</IfModule>

Como já foi mencionado, isso redireciona para http://www./ infelizmente. Quem pode ajudar?

    
por MrWhite 13.10.2010 / 18:45

4 respostas

3

Prix quase tinha. Quando você nega o RewriteCond (com ! ), ele não captura, então %1 está vazio. Duas soluções possíveis:

Dummy RewriteCond :

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
RewriteRule ^/(.*)$ http://www\.%1/$1 [R=301,L]

%{HTTP_HOST} em RewriteRule :

RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^/(.*)$ http://www\.%{HTTP_HOST}/$1 [R=301,L]
    
por 13.10.2010 / 20:55
2

Em suma, uma versão limpa e testada do código:

Isso funciona (para mim) para redirecionar www para não www

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Qualquer um desses trabalho (para mim) redireciona o não-www para www

RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%{HTTP_HOST}/$1 [R=301,L]

ou

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%1/$1 [R=301,L]
    
por 29.01.2011 / 04:41
1
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteCond %{HTTP_HOST} ^(.+)\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www\.%2/$1 [R=301,L]

o ! significa que se ele não começar com "www ...", envie-o para www.%1 , que é o (.+)

    
por 13.10.2010 / 18:52
0

O seguinte sempre funcionou para mim com o Apache 2:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
    
por 13.10.2010 / 20:05