Pregunta

Tengo un sitio web donde quiero que los usuarios que se registren para obtener su propio subdominio.Este subdominio es virtual, y cada subdominio utiliza los mismos archivos de servidor web.

Yo uso PHP y Apache, y sé que los Hosts Virtuales, pero me pregunto donde tengo que poner la vhosts código.En primer lugar, yo no tengo acceso a httpd.conf.Segundo, quiero que esto se hace automáticamente al momento de la inscripción.

He leído acerca de las máquinas virtuales, pero no encontró nada que contesta a mis preguntas.Hay alguien que me puede explicar cómo funciona todo esto junto, o sabe donde puedo encontrar mis respuestas?

¿Fue útil?

Solución

Se puede decir Apache para leer un archivo .conf adicional? (Tradicionalmente se almacenan los host virtuales en httpd-vhosts.conf)

Si es así, añadir algo como lo siguiente y reiniciar el 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>

A continuación, en php, se puede ver lo que el subdominio usuario está solicitando mediante la inspección de:

$_SERVER['HTTP_HOST']

ie. si el usuario solicita http://user1.domainname.com/index.php

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

a continuación, puede explotar ( ' ' $ _SERVER [' HTTP_HOST']) para inspeccionar cada segmento .. etc.

Otros consejos

Se necesitan 3 cosa que este:

1.Configurar su DNS *.yourDomain.com

2.Agregar la directiva ServerAlias a la configuración de apache para este dominio:

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

También asegúrese de que el servidor apache ha UseCanonicalName conjunto para on (este es el valor predeterminado)

3.Grep el nombre del subdominio con PHP:

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

(inspirado por el comentario de Janek)

Si la instancia de Apache está configurado para aliasing *, entonces no hay necesidad de crear un host llamado Virtual -. Usted puede fingir con PHP mediante la evaluación de $ _SERVER [ 'HTTP_HOST']

Para determinar si la instancia de Apache manejarlo, editar el archivo local / etc / hosts (o ventanas equivalente -% SystemRoot% \ system32 \ drivers \ etc \ hosts) para que el nombre virtual deseada está señalando a su servidor.

Por ejemplo

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

Esto asume que 192.168.1.4 es la IP de su servidor. Todo después de que son de alias que el servidor puede ser llamado.

A continuación, como se sugiere Janek crear una página que echo $_SERVER['HTTP_HOST'] para ver si se captura el nombre correctamente. Si es así, entonces todo lo que se requiere es un cambio de DNS y Apache puede permanecer sin cambios.

De otro modo no tienen acceso a apache.conf (este tipo de implica que usted no tiene acceso a una gran cantidad de cosas) esto será difícil de lograr. La programación no será - pero la implementación será.

He aquí por qué:

  1. Apache por defecto servirá de máquinas virtuales. Pero sí es necesario el acceso a directorio conf del servidor (a menudo situado en /etc/httpd/conf.d/) para que pueda crear la máquina virtual "incluir" el archivo (si la configuración de Apache está configurado para incluirlo - la mayoría de instalaciones recientes deben ser).

  2. Tendrá que ser capaz de ciclo de Apache (reinicio). Sin esto los cambios de host virtuales no tendrá efecto.

  3. Tendrá que ser capaz de cambiar el DNS. Siempre se puede cambiar el archivo local / etc / hosts - pero para que los visitantes para llegar a su sitio, tendrá que ser capaz de empujar a través de un cambio de DNS. . (Que puede instantánea - o puede tardar 24 horas en propagarse)

El secuencias de comandos sin duda se puede hacer (ver Cpanel y WHM)

Usted en primer lugar deberá configurar el servidor DNS para resolver los subdominios a su dirección IP principal, es decir *.domain.com tendrá que resolverlo en la dirección IP de su servidor. A continuación, el servidor web tiene que manejar todas las peticiones entrantes independientemente de subdominio así, invocando algún script PHP. El script PHP puede entonces simplemente averiguar qué dominio fue solicitada a la cabecera $_SERVER['HTTP_HOST'] y actuar en consecuencia.

Usted no está realmente "la creación de subdominios el momento del registro de usuario".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top