Como posso garantir que meus URLs sempre comecem com www?

17

Quero garantir que os usuários acessem www.mydomain.commesmo que cheguem pelo alias mydomain.com. Isso é para que eu tenha controle sobre cookies nos subdomínios e para que o Google veja um único domínio, e não uma mistura de URLs.

Como posso fazer isso com o apache?

Magnar
fonte
5
Posso sugerir que você reverta isso e imponha mydomain.com? O prefixo 'www' é redundante e totalmente desnecessário.
Eevee
Os cookies são enviados para todos os subdomínios em mydomain.com, enquanto eu posso decidir por mim mesmos quais cookies são carregados de onde com www.mydomain.com. Por exemplo, posso evitar adicionar cookies a static.mydomain.com, para que os cookies não sejam é transmitido para todas as imagens carregadas. Definitivamente, não é desnecessário.
Magnar
Você pode dizer especificamente ao Google para usar um único estilo de vinculação. Veja minha resposta abaixo.
3030 Robinicks
Eu não tenho o representante, mas acrescentando estas tags seria útil: mod_alias RedirectMatch de redirecionamento
Tom
1
Mesmo que isso seja muito mais tarde, ainda é relevante. www não está obsoleto, porque um domínio sem subdomínio possui várias desvantagens. Consulte yes-www.org/why-use-www por vários motivos para usar o www.
user50849

Respostas:

17
<VirtualHost ip:80>
   ServerName domain.com
   RedirectMatch permanent ^(.*)$ http://www.domain.com$1
</VirtualHost>

<VirtualHost ip:80>
   ServerName www.domain.com

   ... usual config
</VirtualHost>
Dave Cheney
fonte
7
Para uma solução um pouco mais simples, você pode: "Redirecionar permanente / ptth: //www.domain.com/" e o apache preservará automaticamente o sufixo. (I revertida http para desativar o autolink.)
Greg Hewgill
1
Sério ? Doce, eu nunca soube disso. Eu sempre pensei que você tinha que usar RedirectMatch para preservar as peças de fuga da URI
Dave Cheney
4

Adicione isso ao seu httpd.confarquivo:

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

Ative o suporte a mod_rewrite e crie um arquivo .htaccess na pasta raiz do seu domínio com o seguinte conteúdo:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} ^domain\.com$
   RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>
Richard Slater
fonte
não se esqueça de fazer o teste RewriteCond maiúsculas e minúsculas ...
Alnitak
Faça isso apenas se você não tiver acesso para fazer alterações no arquivo de configuração do apache por algum motivo. .htaccessos arquivos têm muita sobrecarga e as reescritas dentro delas tornam muito pior.
John Dalton
usar Redirecionar é sempre preferível usar mod_rewrite para esta tarefa.
David Pashley
3

Se você realmente deseja que o Google use um estilo de domínio específico (com ou sem www ), crie uma conta gratuita das Ferramentas do Google para webmasters , verifique a propriedade do seu domínio (faça o upload de um arquivo) e defina seu domínio preferido usando o painel de controle on-line.

É simples assim, e você não precisa alterar nenhum código no servidor, também os links de entrada com ou sem www serão tratados da mesma forma, aumentando o PageRank de suas páginas.

Os links podem apontar para o seu site usando as versões www e não www do URL (por exemplo, http://www.example.com e http://example.com ). O domínio preferido é a versão que você deseja usar para o seu site nos resultados da pesquisa .

Depois de nos informar seu nome de domínio preferido, levaremos em consideração sua preferência ao exibir os URLs. Pode levar algum tempo até que essa alteração seja totalmente refletida em nosso índice.

Se você não especificar um domínio preferido, poderemos tratar as versões www e não www do domínio como referências separadas para páginas separadas.

Robinicks
fonte
1

Eu tive o problema oposto: as pessoas acessam www.domain.com quando eu apenas quero servir diretamente do domain.com:

<VirtualHost *:80>
   ServerName domain.com

   ... usual config
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain.com
   ServerAlias sub.domain.com # can also catch some other subdomains
   ServerAlias *.domain.com # or all previously unmatched domains

   Redirect permanent / http://domain.com/
</VirtualHost>

Como Greg Hewgill mencionou, usar o Redirect é um pouco mais simples que o RedirectMatch e faz o mesmo trabalho, consulte http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirect para obter mais detalhes.

Tom
fonte