apache - redireciona suddomain para o domínio principal

2

Eu reconstruí meu site antigo. Havia um subdomínio para esse site antigo: forum.example.com . Agora, isso não existe mais. Uma pessoa que acessa meu site usando forum.example.com deve ser redirecionada para example.com .

Meu arquivo .htaccess :

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

Se o host não for example.com , redirecione para example.com . Não deve forum.example.com caber na condição?

Agora, para a parte opcional da pergunta, se alguém puder me explicar a regra acima, seria ótimo.

Veja o que eu entendo na regra acima:

Se o host NÃO for example.com ( !^example.com$ )
redirecionar para http://example.com .

O que não entendo é a primeira parte da regra regex: ^(.*)$ e, em seguida, a referência a ela ( $1 ). Como tudo pode ser colocado como o caminho do arquivo solicitado? Não faria algo assim?

http://example.com/http://www.example.com/[requested file]
    
por Jean-Francois 12.11.2009 / 15:43

1 resposta

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

O código acima examina o host HTTP do navegador de conexão. Observe que o .htaccess só pode funcionar em um pedido que possa alcançar o servidor da web. Isso funcionará para forum.example.com , mas somente se forum.example.com realmente carregar o conteúdo no diretório em que o arquivo .htaccess reside. Se você não tiver os registros DNS configurados (por exemplo, um registro * A ou um registro de forum A) então ele nem mesmo irá para o site, porque o DNS é inválido. Além disso, o Apache deve ser configurado para carregar o site para esse VirtualHost. Portanto, ele deve estar listado na configuração do Apache antes que o .htaccess possa encaminhar a URL conforme especificado.

Para sua segunda pergunta, no RewriteRule part ^(.*)$ , isso corresponde apenas ao arquivo que é acessado fora do servidor. A parte RewriteCond aplica apenas a regra em certos nomes de host, então ^(.*)$ especifica que qualquer solicitação siga as regras de reconfiguração.

Portanto, o código .htaccess acima será aplicado a todas as solicitações após o / , se o host não for igual a example.com .

Deixe-me saber se você precisar de mais explicações.

    
por 12.11.2009 / 19:15