Apache webserver: Como redirecionar todas as solicitações para domain.com para www.domain.com [duplicate]

2

Algo como isto funciona para a página de índice:

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

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

Então, uma URL como esta:

http://example.com gets forwarded to 
http://www.example.com

mas isso não funciona:

http://example.com/robots.txt

Eu também tentei o seguinte no .htaccess com os mesmos resultados:

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

Por favor me ajude a resolver isso.

Configuração completa:

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

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

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

ProxyPass / balancer://example/ stickysession=JSESSIONID|jsessionid
ProxyPassReverse / balancer://example/ stickysession=JSESSIONID|jsessionid
ProxyPreserveHost On

<Proxy balancer://example>
BalancerMember http://host1.example.com:8080/ route=tomcat1
BalancerMember http://host2.example.com:8080/ route=tomcat2
</Proxy>
</VirtualHost>

o robots.txt está localizado em cada um dos servidores do tomcat.

    
por Prashant 05.07.2013 / 00:20

4 respostas

4

Eu sempre uso um padrão negado, então qualquer coisa que corresponda ao host virtual, mas não corresponde ao endereço canônico, será redirecionado.

RewriteCond %{HTTP_HOST} !^www.example.com [nocase]
RewriteRule ^/(.*)$ http://www.example.com/$1 [redirect=permanent,nocase,last]

Isso tem o benefício de um número ilimitado e não especificado de ServerAlias diretivas (por exemplo, * .exemplo.net, * .exemplo.org, * .exemplo.asia etc.) para todos redirecionar corretamente para www.example.com )

    
por 05.07.2013 / 02:24
3

Eu pessoalmente sempre achei que um simples redirecionamento 301 era mais do que adequado para esse propósito:

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

É simples, fácil de ler / relembrar e o trabalho é feito corretamente.

Isso é realmente copiado do meu servidor web de produção, então sei que funciona.

Há documentos sobre redirecionamentos do Apache disponíveis aqui: link

E eu acabei de testar e digitar o link redireciona corretamente para link

    
por 05.07.2013 / 02:26
2

Isso sempre funcionou para mim:

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

Eu acho que você está perdendo o $ na condição, talvez?

Mais informações podem ser encontradas aqui: link link

    
por 05.07.2013 / 01:08
0

A página de documentação do Apache Redirecionando e Remapeando com o mod_rewrite diz:

nomes de host canônicos

Descrição: O objetivo dessa regra é forçar o uso de um nome de host específico, em vez de outros nomes de host que podem ser usados para alcançar o mesmo site. Por exemplo, se você deseja forçar o uso de www.example.com em vez de example.com, você pode usar uma variante da seguinte receita.

Solução:

A melhor maneira de resolver isso não envolve mod_rewrite, mas usa a diretiva Redirect colocada em um host virtual para o (s) nome (s) não-canônico (s) do host.

<VirtualHost *:80>
  ServerName undesired.example.com
  ServerAlias example.com notthis.example.com
  Redirect "/" "http://www.example.com/"
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example.com
</VirtualHost>

Você pode, alternativamente, fazer isso usando a diretiva <If> :

<If "%{HTTP_HOST} != 'www.example.com'">
  Redirect "/" "http://www.example.com/"
</If>
    
por 30.12.2015 / 14:46

Tags