Apache2 - Redirecionando um subdomínio para outra URL

15

Eu tenho dois subdomínios, a.website.com e b.website.com, apontando para o mesmo endereço IP. Desejo redirecionar b.website.com para a.website.com:8080. Eu tenho isso no meu arquivo .htaccess ...

RewriteEngine on
RewriteCond {HTTP_HOST} b\.website\.com
RewriteRule ^(.*)$ http://b.website.com:8080$1 [L]

...mas não funciona.

Existe uma maneira de fazê-lo funcionar?

Technius
fonte
Tente adicionar o seguinte para .htaccessno diretório pai acima do diretório de interesse: RedirectMatch ^/foo/$ /foo/bar/ou RedirectMatch ^/foo/$ /bar/baz/. Consulte também Como obter o apache2 para redirecionar para um subdiretório .
JWW

Respostas:

20

Você sempre pode usar um VirtualHost simples:

<VirtualHost *:80>
  ServerName b.website.com
  RedirectPermanent / http://a.website.com:8080/
</VirtualHost>

Se você preferir usar o arquivo .htaccess, está faltando um sinal de% na condição de reconfiguração:

RewriteEngine on
RewriteCond %{HTTP_HOST} b.website.com
RewriteRule ^(.*)$ http://a.website.com:8080$1 [L]
mattw
fonte
Eu tentei os dois e eles não funcionaram. Eu tenho o mod_rewrite ativado e eu tenho o VirtualHost em um arquivo de site separado. Falta alguma coisa?
Technius
3
Isso funciona bem. Eu tive um problema de redirecionamento de loop, porque estava apontando um subdomínio para uma subpasta e essa subpasta estava redirecionando. Agora, redireciono o subdomínio para o URL que corresponde à pasta, e o segundo redirecionamento acontece muito bem!
Paschalis
Como fazer para preservar http://ou https://, de qualquer maneira, como b.website.comfoi acessado?
Golar Ramblar
0

Complementando a resposta principal

Tipo de redirecionamento

Você pode especificar explicitamente o tipo de redirecionamento que pretende.
Sugiro que você use um redirecionamento temporário (302) ao testar a regra de redirecionamento.

# In a VirtualHost file
...
Redirect [301|302] /old_location http://new_domain/newlocation


# In a .httaccess file
...
RewriteRule ^(.*)$ http://new_domain/$1 [R=302,L]

Especificar padrões de correspondência de diretório

Você só poderia redirecionar solicitações que correspondam a algum padrão.

# In a VirtualHost file
...
RedirectMatch [301|302] ^/public/(.*)$ http://public.example.com/$1


# In a .httaccess file
...
RewriteRule ^/public/(.*)$ http://public.example.com/$1 [R=302,L]
ePi272314
fonte