Pergunta

Eu tenho um site onde eu quero que os usuários que se inscreverem para obter seu próprio subdomínio. Este subdomínio é virtual, e cada subdomínio usa os arquivos de mesmo servidor web.

Eu uso o PHP e Apache, e eu sei sobre máquinas virtuais, mas eu estou querendo saber onde eu preciso colocar o código vhosts. Em primeiro lugar, eu não tenho acesso a httpd.conf. Em segundo lugar, eu quero que isso seja feito automaticamente no momento do registo.

Eu li sobre hosts virtuais, mas não encontrou nada que responde minhas perguntas. Existe alguém que pode me explicar como tudo isso funciona em conjunto, ou sabe onde eu posso encontrar minhas respostas?

Foi útil?

Solução

Você pode dizer apache para ler um arquivo .conf extra? (Tradicionalmente você armazenar seus vhosts no httpd-vhosts.conf)

Se assim for, adicionar algo como o seguinte e reiniciar o servidor web

NameVirtualHost *:80

<VirtualHost *:80>
        DocumentRoot /abs/path/to/webroot
        ServerName   domainname.com
        ServerAlias *.domainname.com
        <Directory /abs/path/to/webroot>
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

, em seguida, em php, você pode ver que subdomínio o usuário está solicitando inspecionando:

$_SERVER['HTTP_HOST']

ie. se o usuário solicitar http://user1.domainname.com/index.php

$ _ SERVER [ 'HTTP_HOST'] terá user1.domainname.com

Você pode então explode ( ' ' $ _SERVER [' HTTP_HOST']) para inspecionar cada segmento .. etc.

Outras dicas

Você vai precisar de 3 coisa para isso:

1. Defina o seu DNS para * .yourDomain.com

2. Adicione a diretiva ServerAlias ??à configuração do Apache para este domínio:

ServerName www.yourDomain.com
ServerAlias *.yourDomain.com yourDomain.com

Também certifique-se que você apache servidor tem conjunto UseCanonicalName para on (este é o padrão)

3. Grep o nome de subdomínio com PHP:

  $nameChunks = explode('.', $_SERVER['HTTP_HOST']);
  $subDomainName = $nameChunks[count($nameChunks) - 3];

(inspirado pelo comentário de Janek)

Se a instância Apache está configurado para * aliasing, então não há necessidade de criar um virtual host chamado -. Você pode fingir com PHP avaliando $ _SERVER [ 'HTTP_HOST']

Para determinar se sua instância Apache vai lidar com isso, editar seu arquivo / etc / hosts local (ou janelas equivalente -% SystemRoot% \ system32 \ drivers \ etc \ hosts) para que o nome virtual desejado está apontando para seu servidor.

Por exemplo

# An example HOSTS file.
192.168.1.4 testserver testserver.com subdomain.testserver.com secondname.com

Esta supor que 192.168.1.4 é o IP do seu servidor. Tudo depois que são alias que o servidor pode ser chamado.

Então, como Janek sugeriu criar uma página que irá echo $_SERVER['HTTP_HOST'] para ver se ele captura o nome corretamente. Se assim for, então tudo o que é necessário é uma mudança de DNS e Apache pode permanecer inalterado.

Caso contrário, sem acesso a apache.conf (este tipo de implica que você não tem acesso a um monte de coisas) isto será difícil de retirar. A programação não será - mas a implementação será.

Aqui está o porquê:

  1. Apache por padrão irá servir hosts virtuais. Mas você necessitem de acesso a diretório conf do servidor (muitas vezes localizados em /etc/httpd/conf.d/) para que você possa criar o host virtual "incluir" arquivo (se a configuração do Apache é configurado para incluí-lo - a maioria das instalações recentes devem ser).

  2. Você precisa ser capaz de ciclo Apache (reiniciar). Sem isso as mudanças de host virtuais não terá efeito.

  3. Você precisa ser capaz de mudar o DNS. Você sempre pode mudar o seu etc arquivo local / / hosts - mas para que os visitantes para chegar ao seu site, você precisa ser capaz de empurrar através de uma mudança de DNS. . (Que pode instantânea - ou pode levar até 24 horas para propagar)

O scripting certamente pode ser feito (ver Cpanel e WHM)

Você vai antes de tudo necessidade de configurar o servidor DNS para resolver todos os subdomínios para o seu endereço IP principal, ou seja *.domain.com terá que resolver o endereço IP do seu servidor. Em seguida, o servidor web precisa lidar com todas as solicitações recebidas independentemente do subdomínio, bem como, invocando algum script PHP. O script PHP pode simplesmente descobrir o domínio foi solicitado a partir do cabeçalho $_SERVER['HTTP_HOST'] e agir em conformidade.

Você não é realmente "criar subdomínios após registo do utilizador".

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