Pergunta

Eu gostaria de redirecionar www.example.com para example.com. O seguinte código HTACCESS faz isso acontecer:

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

Mas, existe uma maneira de fazer isso de maneira genérica sem codificar o nome de domínio?

Foi útil?

Solução

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

Igual a Michael's Exceto este funciona: P

Outras dicas

Mas se precisarmos fazer isso para HTTP e HTTPs separados:

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

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

Redirecionar não www para www (Ambos: http + https)

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

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

Se você quiser fazer isso no arquivo httpd.conf, pode fazê -lo sem mod_rewrite (e aparentemente é melhor para desempenho).

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

Eu recebi essa resposta aqui: https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507

Aqui estão as regras para redirecionar um URL www para não-www:

#########################
# redirect www to no-www
#########################

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

Aqui estão as regras para redirecionar um URL sem www para www:

#########################
# redirect no-www to www
#########################

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

Observe que eu usei NE Sinalize para impedir que o Apache escape da sequência de consultas. Sem essa bandeira, o Apache mudará o URL solicitado http://www.example.com/?foo%20bar para http://www.example.com/?foo%2250bar

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R]

o RewriteCond captura tudo no HTTP_HOST variável depois a www. e salva em %1.

o RewriteRule captura o URL sem os principais / e salva em $1.

Experimente isso:

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

Se o host começar com www, colocamos todo o host no início do URL e tire o "www".

Pode haver muitas informações erradas por aí sobre redirecionamentos de htaccess, eu acho. Primeiro, verifique se o seu site está em execução no Unix usando o Apache e não em um host do Windows, se você espera que esse código funcione.

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

(No entanto, verifique se não há espaços de linha entre cada linha de texto; eu adicionei um espaço extra entre as linhas, para que ela fique bem nesta janela.)

Este é um trecho de código que pode ser usado para direcionar a versão www do seu site para a versão http: //. Existem outros códigos semelhantes que também podem ser usados.

Manipulador genérico completo WWW, http/https

Eu não vi uma resposta completa. Eu uso isso para lidar com a inclusão www.

  1. Genérico. Não requer informações de domínio.
  2. Forças www no domínio primário: www.domain.com
  3. Remove www em subdomínios: sub.domain.com
  4. Preserva o status HTTP/HTTPS.
  5. Permite cookies individuais para domínio / subdomínios

Por favor, deixe -me saber como isso funciona ou se eu deixei uma brecha.

RewriteEngine On
RewriteBase /

# Force WWW. when no subdomain in host
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Remove WWW. when subdomain(s) in host     
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/subfolder/$1 [R=301,L]

Para subpasta

Para aqueles que precisam acessar o site inteiro SEM O prefixo 'www'.

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

Mare com certeza você adiciona isso ao seguinte arquivo

/site/location/.htaccess 

www para não www com https

RewriteEngine on

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

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Eu usei a regra acima para FWD www para sem www e funciona bem para a página inicial, no entanto, nas páginas internas que eles estão encaminhando para /index.php

Encontrei essa outra regra no meu arquivo .htaccess, que está causando isso, mas não tenho certeza do que fazer a respeito. Qualquer sugestão seria ótima:

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]
RewriteEngine on
# if host value starts with "www."
RewriteCond %{HTTP_HOST} ^www\.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]

Se você quiser remover www nos dois http e https , use o seguinte :

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]

Isso redireciona não SSL

para

E ssl

para

no Apache 2.4.* você pode fazer isso usando um Redirect com if diretivo,

<if "%{HTTP_HOST} =='www.example.com'">
Redirect / http://example.com/
</if>

Uso: JavaScript / JQuery

// similar behavior as an HTTP redirect
window.location.replace("http://www.stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";

Ou .htaccess:

RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]

e o método PHP:

$protocol = (@$_SERVER["HTTPS"]    == "on") ? "https://" : "http://";

if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') {
    header('Location: '.$protocol.'www.'.$_SERVER    ['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']);
    exit;
}

Ajax

$.ajax({
    type: "POST",
    url: reqUrl,
    data: reqBody,
    dataType: "json",
    success: function(data, textStatus) {
        if (data.redirect) {
            // data.redirect contains the string URL to redirect to
            window.location.href = data.redirect;
        }
        else {
            // data.form contains the HTML for the replacement form
            $("#myform").replaceWith(data.form);
        }
    }
});

Usando .htaccess para redirecionar para www ou não www:

Basta colocar as seguintes linhas de código no seu arquivo principal .htaccess. Nos dois casos, basta alterar o domain.com para seu próprio nome de host.

Redirecionar para www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^domain\.com [NC]
  RewriteRule ^(.*)$ http://wwwDOTdomainDOtcom/$1 [L,R=301]
</IfModule>

Redirecionar para não-www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
  RewriteRule ^(.*)$ http://domainDOTcom/$1 [L,R=301]
</IfModule>

Altere o DOT para =>. !!!

A única maneira de fazer isso funcionar ...

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

Se você está forçando www. no URL ou forçando o SSL Prototcol, tente usar possíveis variações no arquivo htaccess, como:

RewriteEngine On
RewriteBase /

### Force WWW ###

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

## Force SSL ###

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

## Block  IP's ###
Order Deny,Allow
Deny from 256.251.0.139
Deny from 199.127.0.259

A resposta selecionada e muitas outras soluções aqui abandonaram a parte do URL depois /, então, basicamente, ela sempre é redirecionada para o domínio principal, pelo menos para mim. Então, estou adicionando amostra de trabalho respeitando o caminho completo após a barra ..

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

Não sei por que você deseja remover www. Mas a versão reversa seria:

# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_HOST} ^whattimein\.com
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L]

E a vantagem deste script é: se você tem algo como teste.whattimein.com ou qualquer outro (ambientes para desenvolver/testar), ele não vai redirecionar você para o ambiente original.

Isso é atualizado para funcionar no Apache 2.4:

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

A única mudança vs Michael's é remover o [NC], que produz o erro "AH00665":

A opção nocase para padrão não régica '-f' não é suportada e será ignorada

Olá, você pode usar as seguintes regras em seu arquivo htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top