Adicionando ou Removendo o WWW da URL com .htaccess

Para inicio de conversa é necessário saber o que é o htaccess e suas possibilidades, então recomendo a leitura em:
http://httpd.apache.org/docs/1.3/howto/htaccess.html

O que vamos fazer a seguir é adicionar o www. no inicio do dominio caso ele não seja digitado pelo usuário, por exemplo:

Usuario digita: mepergunte.com

O htaccess converte para: www.mepergunte.com

Para isso, basta editar (ou criar) o arquivo .htaccess na raiz do seu dominio com o seguinte código:


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

Altere no código acima o domínio, para onde será feito o redirecionamento, inclusive colocando a ultima linha com um diretorio qualquer.


RewriteRule (.*) http://www.mepergunte.com/site/$1 [R=301,L]

Agora vamos fazer o processo inverso, que inclusive é o meu favorito.

Veja como remover o www. do seu domínio automaticamente utilizando .htaccess


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

Basicamente so altera a linha 3 e 4, ja que as duas primeiraas so ativam e setam opções que serão utilizadas no código.

A linha 3 é a condição e a linha 4 o que será executada caso a condição seja válida.

Bom, acho que é isso. Aproveitando o post, algumas dicas bacanas para .htacess você pode encontrar no site Htaccess Tools, como detecção de navegação por iPhone, redirecionamentos, sistema de senhas, etc.

18 comments

  1. então…
    tenho um site com nenhum .htaccess na raiz, mas em uma pasta específica que é em zend tem um .htaccess assim:

    SetEnv APPLICATION_ENV development

    RewriteEngine On
    RewriteRule .* index.php

  2. Olá!
    Gostaria de saber porque o meu não funciona..

    O .htaccess está na raíz na seguinte forma:

    RewriteEngine On
    RewriteBase /
    Options +FollowSymLinks
    RewriteCond %{HTTP_HOST} ^www\.(.*)
    RewriteRule (.*) http://%1/$1 [R=301,L]
    ErrorDocument 404 /error404.php

    Não funciona… Quando digita-se ‘site.com’ abre normalmente, mas quando digita-se ‘www.site.com’ dá erro 404. Eu quero tirar esse www e redirecionar para sem o http://www...

    Muito obrigado

  3. então cara, eu quero usar a 1ª opção, pra quando a pessoa digita meu site sem o ‘www” mesmo assim redirecionar pro meu site. como eu faço pra criar o arquivo htaccess e colocar no blogger? vc disse q tem q colocar na raiz do dominio, e eu nem sei o que é isso. se vc puder me ajudar eu vou ficar muito grato.

  4. Matheus, voce conferiu se o seu RewriteEngine esta ligado? Remova essa ErrorDocument

  5. Juan, no blogger nao é possivel. Funcionando apenas para hospedagens com servidores web rodando Apache.

  6. E ai Diogo, segue o código com problema, utilizei seu código e redirecionou correto, só que redireciona apenas o site sem passar nenhum valor na url.. Ex. quando digito www/site/com/br redireciona para site/com/br E quando digito www/site/com/br/pagina-qualquer redireciona e mostra na url a pagina com site/com/br/index.php?url=pagina-qualquer/
    RewriteEngine On
    SetOutputFilter DEFLATE
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(!.(\.gif|\.jpg|\.png|\.swf|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [R=301,NC]
    RewriteRule ^(.[^.*]+)\/$ ?jogar=$1 [NC]
    Options -Indexes
    Options +FollowSymLinks
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http:\/\/%1%{REQUEST_URI} [R=301,QSA,NC,L]

  7. Victor, o codigo esta correto. ~E so tratar o GET da URL agora. Não vi problema algum.

  8. Diogo,

    Funciona no Zend 2 Sim! Estou utilizando o código.

    Obrigado!

  9. Boa tarde será que você poderia dar uma ajuda?
    Meu .htaccess está assim:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1

    Seguinte, está tudo perfeito, tudo funcionando só que além das páginas normais que tenho do site tipo:
    sobre, produtos, contato tenho uma página personalizada para cada cliente de uma parceria que tenho.

    Nesta página de parceria tenho o css, js, images próprio dela. Quando chamo o link na home ex: <a class="btn btn-default btn-sm" href="/parceiro-exemplo.php” target=”_blank”>Veja mais »

    Está me abrindo a página trazendo junto o header.php e footer.php, teria alguma coisa a fazer para resolver isso? Ou direto na página ou no .htaccess ?

    Desde já obrigado pela atenção.?

  10. Boa noite Diogo, estou com um problema no site do meu cliente (ravansolutions.com). Ao digitar o endereço que comentei sem o “www.” o site funciona perfeitamente, clico na A Empresa e ele desce automaticamente, assim como em Produtos e Contato. Porém quando digito “www.ravansolutions.com” o site abre, mas quando clico em A Empresa, Produtos e Contato, o deslize automático para de funcionar somem alguns ícones do site e em produtos ele não abre. Mas quando clico em “Tabelas” ou “Certificação” e depois volto clico em “Home”, ele retira automaticamente o “www.” do início do endereço e passa a funcionar corretamente.
    Tentei colocar as linhas de código que vc menciona no .htacces, mas não obtive sucesso, meu .htacces está assim:
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    Cara.., realmente não sei como resolver isso, se puder me ajudar, ficarei muito grato.
    Att.

  11. Anderson, no seu caso esta simples. Nada a ver tem com o htaccess. É so o link mesmo que ta com o endereço completo. Tenta recuperar qual URL atual esta, com ou sem www, e coloca elas tambem no MENU. Isso resolve seu problema.

  12. Deve ser erro do seu PHP ou backend, de onde ele tirou esse public_html ai?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.