.htaccess Remover WWW da URL + Diretórios

Isto parece não ser um problema para muitas pessoas (leia-se: não consigo encontrar uma resposta), mas gostaria de atualizar o seguinte código de htaccess para não só remover o ‘www’ do URL, mas também qualquer sub- diretórios que são acessados.

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

Com isso, http://www.example.com/any/ resolve bem, mas quero redirecioná-lo para http://example.com/any/ como na raiz.

Eu tive o mesmo problema (problemas ao remover ‘www’ de URLs que apontam para um subdiretório em um domínio de complemento), mas depois de algumas tentativas e erros, isso parece funcionar para mim:

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

Exemplo: http://www.addondomain.com/projects/a/gallery/4/2

Código de redirecionamento para ambos não www => www e oposto www => não-www. Não há domínios e esquemas de codificação no arquivo .htaccess. Então, o domínio de origem e a versão http / https serão preservados.

APACHE 2.4 E MAIS NOVO

NÃO WWW => WWW:

 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

WWW => NÃO-WWW:

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

Nota: não está funcionando no Apache 2.2, onde% {REQUEST_SCHEME} não está disponível. Para compatibilidade com o Apache 2.2, use o código abaixo ou substitua% {REQUEST_SCHEME} por http / https fixo.


APACHE 2.2 E MAIS NOVO

NÃO WWW => WWW:

 RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

… ou versão mais curta …

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

WWW => NÃO-WWW:

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

… versão mais curta não é possível porque% N está disponível apenas no último RewriteCond …

Eu acho que você está perto, mas tente o seguinte:

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

Não sei exatamente o que você quer dizer sobre subdiretórios, mas isso segue o seu exemplo.

Eu usei e funcionou para mim

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

Exemplo: http://www.locphen.vn/he-thong-loc-nuoc-gieng.html -> http://locphen.vn/he-thong-loc-nuoc-gieng.html

Eu uso esse código. Se meu visitante não tiver www em sua url, essa condição adicionará www com url, caso contrário, não será necessário adicionar www com url (porque ele já tem. :))

 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.YOUR-SITE\.com$ [NC] RewriteRule ^(.*) http://www.YOUR-SITE.com/$1 [L,R] 

Olá, o código funciona perfeitamente, só que passa com o www em um url com algum valor e barra no final ele mostra o parâmetro e valor no url.

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]