Usando o URL Rewrite , que Sam Cogen mencionou, que é instalado automaticamente em qualquer conta asp.net com desconto (e que pode ser instalado em qualquer servidor IIS7), criei uma regra de reescrita para resolver o meu problema.
Nota : A equipe do asp.net com desconto disse que uma regra de reescrita é a única maneira de realizar isso em uma de suas contas, além de um script programático. O asp.net oferece um script (digamos, hack) programático que roteará subdomínios para subdiretórios, mas eu precisava de mais flexibilidade e desempenho do que essa solução forneceria.
Se o módulo de reescrita do IIS 7 não estiver instalado, você terá que encontrar o módulo (provavelmente no site do IIS da Microsoft) e instalá-lo.
Quando o módulo de reescrita estiver instalado no IIS, conecte-se a ele usando o Gerenciador do IIS.
Verifique se você tem o nível raiz do site selecionado ao criar a regra (em vez do subdiretório onde o aplicativo está), isso é muito importante porque me levou a um erro crítico que perdi algum tempo. As regras de reescrita podem ser aplicadas em diferentes níveis na hierarquia de diretórios, fazendo com que uma regra tenha efeitos diferentes dependendo de onde na hierarquia de diretórios a regra está localizada (acredito que faça uma alteração no web.config local, quando uma regra é criado, mas não tomei tempo para confirmar isso). Isso também significa que você não pode ver as regras definidas em outros diretórios quando você está alterando regras em outro diretório.
A seleção do diretório raiz para a reescrita é importante porque você deseja reencaminhar todos os URLs de subdomínio para o URL do subdiretório (exceto aqueles já roteados para o subdiretório).
Tendo selecionado o diretório do site raiz, clique duas vezes em URL rewrite , para entrar na área de reescrita. Em seguida, clique em Adicionar regra (s) e crie uma regra em branco.
Para a correspondência
Uso de Padrão : ^(?!serverone/)(.*)
e defina
URL solicitado: para ' Corresponde ao padrão ' e
Usando para Expressões regulares .
Isso encaminhará qualquer url por essa regra, ignorando aquelas que já estão indo para o subdomínio correto, mas queremos restringir a reescrita do material de roteamento que não tem o subdomínio na URL, então, em seguida, adicionaremos uma condição .
Ele só precisa de uma condição, usando {HTTP_HOST}
para entrada , e o padrão para isso é:
s1.site.com
Por fim, para a ação, você precisa de um tipo de ação 'de' reescrever 'que acrescenta o valor da string de consulta.
O URL de reescrita deve ser: serverone/{R:0}
.