¿Cómo dejar que PHP cree un subdominio automáticamente para cada usuario?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

¿Cómo creo un subdominio como http://user.mywebsite.com ? ¿Tengo que acceder a htaccess de alguna manera? ¿Es realmente posible crearlo a través de un código php puro o necesito usar algún lenguaje externo del servidor de script?

A los que respondieron: Bueno, entonces, ¿debería preguntarle a mi hosting si proporcionan algún tipo de acceso DNS?

¿Fue útil?

Solución

Está buscando crear un registro A personalizado .

Estoy bastante seguro de que puede usar comodines al especificar registros A que le permitirán hacer algo como esto:

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1 sería la dirección IP de su servidor web. El método para agregar realmente el registro dependerá de su host.


Hacerlo como http://mywebsite.com/user sería mucho más fácil de configurar si es una opción.

Entonces podría simplemente agregar un archivo .htaccess que se vea así:

Options +FollowSymLinks

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

En lo anterior, los nombres de usuario están limitados a los caracteres a-z


La regla de reescritura para tomar el subdominio se vería así:

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

Otros consejos

La función que busca se llama Subdominios comodín . Le permite no tener que configurar DNS para cada subdominio y, en su lugar, usar reescrituras de apache para la redirección. Puede encontrar un buen tutorial aquí , pero hay miles de tutoriales por ahí. Aquí está el código necesario de ese tutorial:

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

Sin embargo, dado que requería el uso de VirtualHosts, debe establecerse en el archivo httpd.conf del servidor, en lugar de un .htaccess local.

Lo hago un poco diferente de Mark. Paso todo el dominio y tomo el subdominio en php.

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

Esto ignora las imágenes y asigna todo lo demás a mi archivo index.php. Entonces si voy a

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

Vuelvo

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

Luego, en mi código index.php, simplemente exploto mi nombre de usuario fuera de hostName. Esto me da buenas y bonitas URL de SEO.

Configuramos DNS comodín como se explicó anteriormente. Entonces el registro es * .yourname.com

Entonces, todos los subdominios en realidad van al mismo lugar, pero PHP trata cada subdominio como una cuenta diferente.

Utilizamos el siguiente código:

$url=

Configuramos DNS comodín como se explicó anteriormente. Entonces el registro es * .yourname.com

Entonces, todos los subdominios en realidad van al mismo lugar, pero PHP trata cada subdominio como una cuenta diferente.

Utilizamos el siguiente código:

<*>

Este código solo establece la variable $ account igual que el subdominio. Luego puede recuperar sus archivos y otra información en función de su cuenta.

Esto probablemente no sea tan eficiente como las formas mencionadas anteriormente, pero si no tiene acceso a BIND y / o limitado .htaccess este método debería funcionar (siempre que su host configure el comodín para usted) .

En realidad, utilizamos este método para conectarnos a la base de datos de clientes para una aplicación de comercio electrónico multiempresa, pero también puede funcionar para usted.

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

Este código solo establece la variable $ account igual que el subdominio. Luego puede recuperar sus archivos y otra información en función de su cuenta.

Esto probablemente no sea tan eficiente como las formas mencionadas anteriormente, pero si no tiene acceso a BIND y / o limitado .htaccess este método debería funcionar (siempre que su host configure el comodín para usted) .

En realidad, utilizamos este método para conectarnos a la base de datos de clientes para una aplicación de comercio electrónico multiempresa, pero también puede funcionar para usted.

No se preocupe con los archivos .htaccess cuando puede usar Apache mass virtual hosting .

De la documentación:

  

#incluye parte del nombre del servidor en los nombres de archivo   VirtualDocumentRoot / www / hosts /% 2 / docs

En cierto modo es el reverso de su pregunta: cada 'subdominio' es un usuario. Si el usuario no existe, obtienes un 404.

El único inconveniente es que la variable de entorno DOCUMENT_ROOT no está configurada correctamente en el subdirectorio used , sino la raíz_documento predeterminada en de htconfig.

Solución PHP simple para subdominios y aplicaciones web multidominio

Paso 1. Proporcione el registro DNS A como " * " para los dominios (o dominios) que va a servir "ejemplo.org"

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

Paso 2. Verifique la falta de inicio de sesión cuando el usuario se registre o cambie el inicio de sesión. Además, evite los puntos en esos inicios de sesión.

Paso 3. Luego verifique la consulta     

        // Request was http://qwerty.example.org
        $q = explode('.', 

Solución PHP simple para subdominios y aplicaciones web multidominio

Paso 1. Proporcione el registro DNS A como " * " para los dominios (o dominios) que va a servir "ejemplo.org"

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

Paso 2. Verifique la falta de inicio de sesión cuando el usuario se registre o cambie el inicio de sesión. Además, evite los puntos en esos inicios de sesión.

Paso 3. Luego verifique la consulta     

qwerty.example.org
qwerty.example.net 

johnsmith.somecompany.com
paulsmith.somecompany.com

Esta solución puede servir diferentes dominios

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

Si necesita las mismas mellas en diferentes dominios servidos de manera diferente, es posible que deba almacenar la elección del usuario para el dominio al registrar el inicio de sesión.

<*>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 solución puede servir diferentes dominios

<*>

Si necesita las mismas mellas en diferentes dominios servidos de manera diferente, es posible que deba almacenar la elección del usuario para el dominio al registrar el inicio de sesión.

<*>

Podría [potencialmente] hacer una reescritura de la URL, pero sí: debe tener el control de su configuración de DNS para que cuando se agregue un usuario obtenga su propio subdominio.

Además de los cambios de configuración en su servidor WWW para manejar el nuevo subdominio, su código necesitaría realizar cambios en sus registros DNS. Entonces, a menos que esté ejecutando su propio BIND (o similar), deberá descubrir cómo acceder a la configuración de su proveedor de servidores de nombres. Si no ofrecen algún tipo de API, esto puede ser complicado.

Actualización: sí, consultaría con su registrador si también están proporcionando el servicio del servidor de nombres (como suele ser el caso). Nunca he explorado esta opción antes, pero sospecho que la mayoría de los registradores de consumidores no lo hacen. Busqué en Google las API de GoDaddy y las API de GoDaddy DNS, pero no pude subir nada, así que supongo que la mejor opción sería consultar la ayuda en línea con su proveedor, y si eso no responde la pregunta, póngase en contacto de su personal de apoyo.

Primero, debe asegurarse de que su servidor esté configurado para permitir subdominios comodín. Lo logré en JustHost creando un subdominio llamado manualmente * . También especifiqué una carpeta llamada subdominios como la raíz del documento para los subdominios comodín. Agregue esto a un archivo .htaccess en su carpeta de subdominios:

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

Finalmente, todo lo que necesita hacer es crear una carpeta en su carpeta de subdominios, luego colocar los archivos del subdominio en ese directorio.

Esto se puede lograr en .htaccess siempre que su servidor esté configurado para permitir subdominios comodín. Lo logré en JustHost creando un subdominio llamado manualmente * y especificando una carpeta llamada subdominios como la raíz del documento para los subdominios comodín. Agregue esto a su archivo .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, cree una carpeta para su subdominio y coloque los archivos de subdominios.

Solo quería agregar, que si usa CloudFlare (gratis), puede usar su API para administrar sus DNS con facilidad.

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