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:
- Uma entrada de DNS é adicionada para
*.example.com - O servidor da web do host (por exemplo, o Apache) está configurado para responder a
*.example.comroteando-o paraexample.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.