Pergunta

Estou procurando permitir que os usuários controlem o subdomínio de um aplicativo com o qual estou brincando, muito parecido com o Basecamp, onde está customusername.seework.com.

O que é exigido no DNS final para permitir que eles sejam criados dinamicamente e estejam disponíveis instantaneamente.

E como você recomenda lidar com isso na lógica do site? Htaccess regra para pesquisar o subdomínio no DB?

Foi útil?

Solução

A maneira como fazemos isso é ter um 'catch all' para nosso nome de domínio registrado no DNS, para que qualquer coisa.ourdomain.com aponte para nosso servidor.

Com o Apache você pode configurar um pacote semelhante para seus vhosts.O ServerName deve ser um nome estático único, mas a diretiva ServerAlias ​​pode conter um padrão.

Servername www.ourdomain.com
ServerAlias *.ourdomain.com

Agora todos os domínios irão acionar o vhost para o nosso projeto.A parte final é decodificar o nome de domínio realmente usado para que você possa descobrir o nome de usuário no seu código, algo como (PHP):

list( $username ) = explode( ".", $_SERVER[ "HTTP_HOST" ] );

ou um RewriteRule como já sugerido que mapeia silenciosamente user.ourdomain.com/foo/bar para www.ourdomain.com/foo/bar?user=user ou o que você preferir.

Outras dicas

Não se preocupe com a reescrita de DNS e URL

Seu registro DNS será estático, algo como:

*.YOURDOMAIN.COM A 123.123.123.123

Peça ao seu provedor de DNS para fazer isso por você (se ainda não tiver feito) ou faça você mesmo se tiver controle sobre seus registros DNS.Isso apontará automaticamente todos os seus subdomínios (atuais e futuros) para o mesmo servidor HTTP.

Uma vez feito isso, você só precisará analisar o cabeçalho HOST em cada solicitação http para detectar qual nome de host foi usado para acessar os scripts do lado do servidor em seu servidor http.

Supondo que você esteja usando ASP.NET, este é um exemplo meio bobo que criei, mas funciona e demonstra a simplicidade dessa abordagem:

<%@ Language="C#" %>
<%
string subDomain = Request.Url.Host.Split('.')[0].ToUpper();
if (subDomain == "CLIENTXXX") Response.Write("Hello CLIENTXXX, your secret number is 33");
else if (subDomain == "CLIENTYYY") Response.Write("Hello CLIENTYYY, your secret number is 44");
else Response.Write(subDomain+" doesn't exist");
%>

O truque para isso é usar a reescrita de URL para que nome.domínio.com mapeia transparentemente para algo como domínio.com/usuários/nome no seu servidor.Depois de iniciar esse caminho, é bastante trivial de implementar.

Eu estava procurando fazer algo semelhante (www.mysite.com/SomeUser).

O que eu fiz foi editar 404.shtml para incluir este código de inclusão do lado do servidor (SSI):

<!--#include virtual="404.php" -- >

Então criei o arquivo 404.php, onde analisei o URL para verificar o nome de um usuário e mostrei suas informações no banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top