Redirecionar todos os subdomínios para subpastas

5

Gostaria de adicionar uma regra para que todos os subdomínios sejam redirecionados para uma subpasta. Por exemplo:

app1.example.com -> example.com/app1
app2.example.com -> example.com/app2
something.example.com -> example.com/something

Todos os subdomínios terão apenas um nível de profundidade.

Perguntas

  • Quais provedores DNS me permitem fazer isso?
  • Essas alternativas são viáveis?
    • Redireciona todos eles para um webapp especial com um IP estático que redireciona para a subpasta adequada. Como posso saber de qual subdomínio eles vieram?
    • Crie programaticamente cada regra quando eu precisar. Quais provedores de DNS têm acesso à API para adicionar regras? Eu acho que o Amazon Route 53 pode ser a resposta aqui.
por alf 07.07.2012 / 01:25

1 resposta

8

Which DNS providers allow me to do this?

Todos os competentes. Nem precisa ser um provedor específico do DNS, a maioria dos bons hosts o ajudará com isso também. Existem dois estágios:

  1. Uma entrada de DNS é adicionada para *.example.com
  2. O servidor da web do host (por exemplo, o Apache) está configurado para responder a *.example.com roteando-o para example.com ' VirtualHost .

Em seguida, no final, adicione uma entrada .htaccess que usa RewriteRule para capturar cada subdomínio e redirecione-a para uma pasta usando a variável HTTP_HOST .

Não testado, mas algo assim:

RewriteEngine on
RewriteCond   %{HTTP_HOST}                 ^[^.]+\.example\.com$
RewriteRule   ^(.+)                        %{HTTP_HOST}$1          [C]
RewriteRule   ^([^.]+)\.example\.com(.*)   http://example.com/$1/$2

Suponha que o usuário solicite app1.example.com/bob .

Linha 2

Isso vai pegar app1.example.com no HTTP_HOST - ele corresponderá ao RewriteCond .

Linha 3

Normalmente, o Apache só passa /bob para ser verificado em relação ao RewriteRule . Para usar o subdomínio, exploramos Encadeamento forçando a próxima regra a corresponder

${HTTP_HOST}$1
|           ^ /bob
^ app1.example.com

Linha 4

A% final RewriteRule agora está combinando com app1.example.com/bob e não apenas /bob . Como resultado, ele pode ter uma expressão regular 'completa' para corresponder a esse subdomínio e ao caminho e executar o redirecionamento desejado.

Se você não quiser esse recurso, simplifique as regras.

Are these alternatives feasible? Redirect them all to a special webapp with a static IP that redirects to the proper subfolder. How can I know from which subdomain they came from?

Não há maneira certa de fazer isso. Você poderia experimentar o HTTP Referer, mas ele não é sempre enviado por todos os navegadores, alguns firewalls removem o cabeçalho, etc.

Programatically create each rule when I need it. Which DNS providers have API access to add rules? I think Amazon Route 53 might be the answer here.

Isso resultaria em uma solução mais complexa para o acima, então eu não recomendaria isso. Também criaria um atraso: os caches de DNS precisariam ser atualizados e determinados visitantes não conseguiriam usar o subdomínio imediatamente até que o fizessem. Pelo menos com a minha sugestão acima, eles seriam capazes de ir imediatamente.

    
por 07.07.2012 / 02:15