Eu tenho um site que parece não redirecionar de não www para www.
Minha configuração do Apache é a seguinte:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
o que estou perdendo?
apache
redirect
mod-rewrite
no-www
user121196
fonte
fonte
.htaccess
solução baseada sugiro uma resposta que foi colocada sobre a questão diametral: stackoverflow.com/a/5262044/367456Respostas:
Usar o mecanismo de reescrita é uma maneira bastante pesada de resolver esse problema. Aqui está uma solução mais simples:
E então você terá outra
<VirtualHost>
seção comServerName www.example.com
a configuração real do servidor. O Apache preserva automaticamente qualquer coisa após o/
uso daRedirect
diretiva , que é um equívoco comum sobre por que esse método não funciona (quando na verdade funciona).fonte
www.example
eexample
onde quer que eles apareçam na amostra.Redirect 301 / http://example2.com/extra/
mas quando ele redireciona, perde a barra final, o que significa que issoexample.com/blah
ocorreexample2.com/extrablah
. Alguma ideia? (Apache 2.2.22)http://example.com/subdir/?lold=13666
=>http://www.example.com/subdir/?lold=13666
fonte
example.com/subdi1/ws/*
passar sem www?s
ao http na terceira linha.fonte
www.
noServerAlias
?Para remover
www
do seuURL
site, use este código no seu.htaccess
arquivo:Para forçar
www
seu site,URL
use este código em.htaccess
Onde
YourSite.com
deve ser substituído pelo seuURL
.fonte
É o que acontece com o código acima. O primeiro bloco de host virtual verifica se a solicitação é www.example.com e executa seu site nesse diretório.
Na sua falta, trata-se da segunda seção do host virtual. Aqui, qualquer coisa que não seja www.example.com é redirecionada para www.example.com.
A ordem aqui é importante. Se você adicionar a segunda diretiva virtualhost primeiro, ela causará um loop de redirecionamento.
Esta solução redirecionará qualquer solicitação para o seu domínio, para www.seudominio.com.
Felicidades!
fonte
Isso é semelhante a muitas das outras sugestões com algumas melhorias:
%{REQUEST_URI}
regras anteriores .A parte do caminho não afetada pelo
RewriteRule
s anterior%{REQUEST_URI}
é.fonte
Isso começa com a
HTTP_HOST
variável, que contém apenas a parte do nome de domínio da URL de entrada (example.com
). Supondo que o nome do domínio não contenhawww.
ae corresponda exatamente ao seu nome de domínio, o RewriteRule entra em ação. O padrão^(.*)$
corresponderá a tudo noREQUEST_URI
, que é o recurso solicitado na solicitação HTTP (foo/blah/index.html
). Ele armazena isso em uma referência anterior, que é usada para reescrever a URL com o novo nome de domínio (que começa comwww
).[NC]
indica correspondência de padrão sem distinção entre maiúsculas e minúsculas,[R=301]
indica um redirecionamento externo usando o código 301 (recurso movido permanentemente) e[L]
interrompe toda a reescrita adicional e redireciona imediatamente.fonte
Código de redirecionamento para não-www => www e oposto a www => não-www. Não há domínios codificados e esquemas no arquivo .htaccess. Portanto, o domínio de origem e a versão http / https serão preservados.
APACHE 2.4 E MAIS NOVO
NÃO-WWW => WWW:
WWW => NÃO WWW:
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:
... ou versão mais curta ...
WWW => NÃO WWW:
... versão mais curta não é possível porque% N está disponível apenas no último RewriteCond ...
fonte
Eu corri isso ...
Eu preciso que isso seja universal para mais de 25 domínios em nosso novo servidor, portanto, esta diretiva está no meu arquivo virtual.conf em uma tag <Directory>. (dir é pai de todas as documentações)
Eu tive que fazer um pouco de invasão na regra de reescrita, pois a documentação completa estava sendo realizada na correspondência de padrões, apesar do que http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html diz sendo apenas coisas após o host e a porta.
fonte
Se você estiver usando o Apache 2.4, sem a necessidade de ativar o módulo de reescrita do apache, poderá usar algo como isto:
fonte
Redirecione domain.tld para www.
As seguintes linhas podem ser adicionadas nas diretivas Apache ou no arquivo .htaccess:
Não se esqueça de aplicar as alterações do apache se você modificar o vhost.
(com base no Drupal7 .htaccess padrão, mas deve funcionar em muitos casos)
fonte
Isto é simples!
fonte
Isso redirecionará não apenas o nome do domínio, mas também as páginas internas. Como ...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
fonte
Tente o seguinte:
fonte
Nem sempre use
Redirect permanent
(ou por que isso pode causar problemas no futuro)Se houver uma chance de você adicionar subdomínios mais tarde, não use
redirect permanent
.Porque se um cliente usou um subdomínio que não foi registrado como
VirtualHost
ele também pode nunca chegar a esse subdomínio, mesmo quando for registrado posteriormente.redirect permanent
envia umHTTP 301 Moved Permanently
para o cliente (navegador) e muitos deles armazenam em cache essa resposta para sempre (até que o cache seja limpo [manualmente]). Portanto, o uso desse subdomínio sempre será redirecionado automaticamente para www. *** sem solicitar o servidor novamente.consulte Por quanto tempo os navegadores armazenam em cache o HTTP 301s?
Então é só usar
Redirect
Apache.org - Quando não usar mod_rewrite
Apache.org - Nomes de host canônicos
fonte
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
verifique este trabalho perfeito
fonte
-Se você hospedar vários nomes de domínio (opcional)
-Se todos esses nomes de domínio estiverem usando https (como deveriam)
-se você quiser que todos esses nomes de domínio usem www dot domainName
Isso evitará o redirecionamento duplo (http: // não www para http: // www e depois para https: // www)
E
Você deve alterar o código de redirecionamento 301 para o mais conveniente
fonte
Eu só tenho um mesmo problema. Mas resolvido com isso
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Esta regra redireciona não www para www.
E esta regra para redirecionar www para não-www
RewriteEngine On RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
Consulte http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
fonte
Isso funciona para mim:
Uso o padrão de antecipação
(?!www.domain.com)
para excluir owww
subdomínio ao redirecionar todos os domínios para owww
subdomínio, a fim de evitar um loop infinito de redirecionamento no Apache.fonte
O código que eu uso é:
fonte
Se estiver usando a solução acima de dois
<VirtualHost *:80>
blocos com diferentesServerName
...... então você deve definir
NameVirtualHost On
também .Se você não fizer isso, o Apache não se permitirá usar os diferentes
ServerName
s para distinguir os blocos, então você recebe esta mensagem de erro:... e nenhum redirecionamento acontece ou você tem um loop de redirecionamento infinito, dependendo do bloco que você colocar primeiro.
fonte
Eu tive uma tarefa semelhante em um WP Multisite, onde a regra de redirecionamento tinha que ser genérica (para qualquer domínio que eu adicionaria à rede). Resolvi primeiro adicionar um curinga ao domínio (domínio estacionado). Note o . depois de .com.
E adicionei as seguintes linhas ao arquivo .htaccess na raiz do meu multisite. Eu acho que funcionaria para qualquer site.
Espero que isso ajude.
ps. Se você deseja redirecionar de não www para www, altere a última linha para
fonte
Achei mais fácil (e mais útil) usar o ServerAlias ao usar vários vhosts.
Isso também funciona com https vhosts.
fonte