Como deixar PHP para criar subdomínio automaticamente para cada usuário?

StackOverflow https://stackoverflow.com/questions/183928

  •  06-07-2019
  •  | 
  •  

Pergunta

Como faço para criar subdomínio como http://user.mywebsite.com ? Eu tenho que acesso htaccess de alguma forma? É realmente simples possível criá-lo através do código php puro ou eu preciso usar alguma linguagem de script do lado do servidor externo?

Para aqueles que responderam: Bem, então, eu deveria pedir a minha hospedagem se eles fornecem algum tipo de acesso DNS ??

Foi útil?

Solução

Você está olhando para criar um costume Um registro .

Eu tenho certeza que você pode usar curingas ao especificar a registros que iria deixá-lo fazer algo como isto:

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1 seria o endereço IP do seu servidor web. O método de realmente adicionando o registro vai depender do seu host.


Fazê-lo como http://mywebsite.com/user seria muito mais fácil de configurar se é uma opção.

Em seguida, você pode simplesmente adicionar um arquivo .htaccess que se parece com isso:

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([aA-zZ])$  dostuff.php?username=$1

No exemplo acima, nomes de utilizador estão limitados aos caracteres a-z


A regra de reescrita para pegar o subdomínio ficaria assim:

RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.com
RewriteRule (.*)  dostuff.php?username=%1

Outras dicas

O recurso que você está depois é chamado Wildcard Subdomains . Ele permite que você não tem que DNS configuração para cada subdomínio, e em vez disso usar o Apache reescritas para o redirecionamento. Você pode encontrar um bom tutorial aqui , mas existem milhares de tutoriais lá fora. Aqui está o código necessário a partir desse tutorial:

<VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.domain.tld
    ServerAlias *.domain.tld
</VirtualHost>

No entanto, uma vez que foi necessário o uso de VirtualHosts ele deve ser definido no arquivo httpd.conf do servidor, em vez de um .htaccess local.

Eu fazê-lo um pouco diferente de Mark. Eu passo todo o domínio e agarrar o subdomínio em PHP.

RewriteCond {REQUEST_URI} !\.(png|gif|jpg)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?uri=$1&hostName=%{HTTP_HOST}

Isto ignora imagens e mapas tudo o resto para o meu arquivo index.php. Então, se eu ir para

http://fred.mywebsite.com/album/Dance/now

eu voltar

http://fred.mywebsite.com/index.php?uri=album/Dance/now&hostName=fred.mywebsite.com

Em seguida, no meu código index.php eu só explodir meu nome de usuário fora do nome do host. Isto dá-me URLs agradáveis ??bastante SEO.

Nós configuração curinga DNS como se explicou acima. Assim, o registro é * .yourname.com

Em seguida, todos os subdomínios estão realmente indo para o mesmo lugar, mas PHP trata cada subdomínio como uma conta diferente.

Nós usamos o seguinte código:

$url=$_SERVER["REQUEST_URI"];
$account=str_replace(".yourdomain.com","",$url);

Este código apenas define a variável $account o mesmo que o subdomínio. Você poderia, então, recuperar seus arquivos e outras informações com base em sua conta.

Esta provavelmente não é tão eficiente quanto as maneiras que lista acima, mas se você não tem acesso a BIND e / ou limitados .htaccess este método deve funcionar (desde que a sua configuração será a sede da curinga para você) .

Nós realmente usar este método para se conectar ao banco de dados de clientes para um multi-empresa aplicativo de e-commerce, mas pode funcionar para você também.

não espalhafato em torno com arquivos .htaccess quando você pode usar Apache massa virtual hospedagem .

A partir da documentação:

#include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%2/docs

De certa forma, é o inverso da sua pergunta: cada 'subdomínio' é um usuário. Se o usuário não existe, você recebe um 404.

O único inconveniente é que a variável de ambiente DOCUMENT_ROOT não está correctamente definido para o usado subdiretório, mas o document_root padrão no de htconfig.

solução PHP simples para subdomínios e aplicativos multi-domínio web

Passo 1. Fornecer DNS um registro como "*" para domínios (ou domínio) que vai servir "example.org"

A record => *.example.org
A record => *.example.net

Passo 2. Verifique uniquity de logins quando o usuário registrar ou alterar login. Além disso, pontos evitar na esses logins.

Passo 3. Em seguida, verifique a consulta

        // Request was http://qwerty.example.org
        $q = explode('.', $_SERVER['HTTP_HOST']);
        /*
            We get following array
            Array
            (
                [0] => qwerty
                [1] => example
                [2] => org
            )
        */

        // Step 4.
        // If second piece of array exists, request was for 
        // SUBDOMAIN which is stored in zero-piece $q[0]
        // otherwise it was for DOMAIN

        if(isset($q[2])) {
            // Find stuff in database for login $q[0] or here it is "qwerty"
            // Use $q[1] to check which domain is asked if u serve multiple domains
        }

?>

Esta solução pode servir diferentes domínios

qwerty.example.org
qwerty.example.net 

johnsmith.somecompany.com
paulsmith.somecompany.com

Se precisar mesmos nicks em domínios diferentes servido de forma diferente, você pode precisar de armazenar escolha do usuário para o domínio ao registrar login.

smith.example.org // Show info about John Smith
smith.example.net // Show info about Paul Smith 

Você poderia [potencialmente] fazer uma reescrita da URL, mas sim:. Você tem que ter o controle de suas configurações de DNS para que quando um usuário é adicionado torna-se seu próprio subdomínio

Além de alterações de configuração em seu servidor WWW para lidar com o novo subdomínio, seu código teria de ser fazer alterações em seus registros DNS. Então, a menos que você estiver executando o seu próprio BIND (ou similar), você precisa descobrir como acessar a configuração do seu provedor de servidor de nomes. Se eles não oferecem algum tipo de API, isso pode ficar complicado.

Update: sim, eu iria verificar com o seu registrador se eles também estão oferecendo o serviço de servidor de nomes (como é frequentemente o caso). Eu nunca explorou esta opção antes, mas eu suspeito que a maioria dos registradores de consumo não. Eu pesquisei para GoDaddy APIs e GoDaddy DNS APIs, mas não foi capaz de transformar qualquer coisa, então eu acho que a melhor opção seria a de verificar a ajuda on-line com o seu provedor, e se isso não responder à pergunta, obter um porão de sua equipe de apoio.

Primeiro, você precisa se certificar que seu servidor está configurado para permitir subdomínios de curinga. Eu consegui isso em JustHost criando um subomain chamado manualmente *. Eu também especificado uma pasta chamada subdomains como a raiz do documento para subdomínios de curinga. Adicione isto a um arquivo .htaccess em seus subdomínios pasta:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

Finalmente, tudo que você precisa fazer é criar uma pasta em seus subdomínios da pasta, em seguida, coloque os arquivos do subdomínio nesse diretório.

Isto pode ser conseguido em .htaccess desde que seu servidor está configurado para permitir subdomínios de curinga. Eu consegui isso em JustHost criando um subomain chamado manualmente * e especificando uma pasta chamada subdomínios como a raiz do documento para subdomínios de curinga. Adicione isto a seu arquivo .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

Finalmente, crie uma pasta para o seu subdomínio e coloque os subdomínios arquivos.

Eu só queria acrescentar que, se você usar CloudFlare (gratuito), você pode usar sua API para gerenciar seus dns com facilidade.

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