Pregunta

Estoy buscando para crear un sistema que el registro va a crear un subdominio en mi sitio web para los usuarios de la zona cuenta.

por ejemplo. johndoe.website.com

Creo que sería algo que ver con el archivo .htaccess y posiblemente volver a dirigir a otra ubicación en el sitio web? Yo en realidad no sé. Sin embargo, cualquier información a mí a comenzar, sería muy apreciada.

Creación de una muestra encima de la zona no es el problema - He hecho esto muchas veces. Sólo soy seguro por dónde empezar con el subdominio.

¿Fue útil?

Solución

La reducción rápida

  1. Es necesario crear un dominio comodín en su servidor DNS * .website.com
  2. Luego, en su contenedor de host virtual que tendrá que especificar el carácter comodín *, así .website.com - Esto se hace en el ServerAlias DOC
  3. A continuación, extraer y verificar el subdominio en PHP y mostrar los datos apropiados

La versión larga

1. Crear una entrada de comodín DNS

En la configuración de DNS es necesario crear un entrada de dominio comodín como *.example.org. Una entrada de comodín es el siguiente:

*.example.org.   3600  A  127.0.0.1

2. Incluir el comodín en el host virtual

El siguiente paso en la configuración de Apache que necesita para configurar un contenedor de host virtual que especifica el comodín en el ServerAlias DOC Directiva. Un contenedor de ejemplo vhost:

<VirtualHost *:80>
  ServerName server.example.org
  ServerAlias *.example.org
  UseCanonicalName Off
</VirtualHost>

3. Averiguar qué subdominio que está en en PHP

Luego, en sus scripts PHP puede averiguar el dominio mirando en el $_SERVER variable de súper mundial. Este es un ejemplo de agarrar el subdominio en PHP:

preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
    $subdomain = $matches[1];
}

He utilizado expresiones regulares para permitir a las personas golpear a su sitio a través de www.subdomain.example.org o subdomain.example.org.

Si no prevé tener que lidiar con www. (U otros subdominios) entonces se podría simplemente utilizar una subcadena de esta manera:

$subdomain = substr(
                 $_SERVER['SERVER_NAME'], 0,
                 strpos($_SERVER['SERVER_NAME'], '.')
             );

Masa Virtual Hosting

Masa alojamiento virtual es un esquema ligeramente diferente a la anterior en que usted normalmente lo utilizan para alojar muchos sitios web diferentes en lugar de intentar usarlo alimentar una aplicación como propone la pregunta.

he documentado mi entorno de alojamiento virtual masivo basado mod_rewrite antes en un mensaje href="http://blog.simonholywell.com/post/1516566788/team-development-server" en mi el blog , que usted podría mirar a si esa es la ruta que desea tomar. También hay, por supuesto, la respectiva página del manual Apache .

Apache también tiene una forma interna de tratar con el alojamiento virtual masa que es un poco menos flexible que el método de mod_rewrite que he utilizado. Todo esto se describe en la dinámicamente configurado misa Hosting página del manual virtual de Apache .

Otros consejos

Se podría permitir que cada subdominio en el primer lugar y luego comprobar si el subdominio es válido. Por ejemplo:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule !^index\.php$ index.php [L]

Dentro de la index.php se puede extraer que el subdominio usando:

if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
    var_dump($match[1]);
}

Pero todo esto requiere que su servidor web acepta cada nombre de subdominio.

Además de la creación de un comodín de DNS, es posible que desee echar un vistazo a masa dinámica virtual Hosting para Apache que es como yo he resuelto esto en el pasado

La forma más sencilla es redirigir todos los subdominios (con comodín *) para que apunte a su / wwwroot. A continuación, poner .htaccess a esta carpeta con el siguiente código:

RewriteCond %{ENV:REDIRECT_SUBDOMAIN} ="" 
RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.domain\.com\.?(:80)?$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/%1 -d 
RewriteRule ^(.*) %1/$1 [E=SUBDOMAIN:%1,L] 
RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]

Esto logrará que cada subcarpeta de la carpeta / wwwroot en aceptable a través de subdominio (foldername.domain.com).

Encontrados esto hace años en http://www.webmasterworld.com/apache/3163397.htm

Me pareció más fácil hacerlo con PHP. De hecho está creando un subdominio dentro de cPanel y crear la carpeta con el nombre de dominio deseado. Como podrán hacerlo de forma manual en cPanel pero todo se hace en milisegundos por una función de PHP simple. Sin clic necesario:)

function create_subdomain($subDomain,$cPanelUser,$cPanelPass,$rootDomain) {

    //  $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain;

    $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain . "&dir=public_html/subdomains/" . $subDomain;

    $openSocket = fsockopen('localhost',2082);
    if(!$openSocket) {
        return "Socket error";
        exit();
    }

    $authString = $cPanelUser . ":" . $cPanelPass;
    $authPass = base64_encode($authString);
    $buildHeaders  = "GET " . $buildRequest ."\r\n";
    $buildHeaders .= "HTTP/1.0\r\n";
    $buildHeaders .= "Host:localhost\r\n";
    $buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
    $buildHeaders .= "\r\n";

    fputs($openSocket, $buildHeaders);
        while(!feof($openSocket)) {
           fgets($openSocket,128);
        }
    fclose($openSocket);

    $newDomain = "http://" . $subDomain . "." . $rootDomain . "/";

   //  return "Created subdomain $newDomain";

}

No tiene nada que ver con .htaccess. Tendrá que configurar los registros DNS y el alojamiento virtual para los subdominios.

mod_vhost_alias es el módulo adecuado para hacer esto.

Con una línea que puede decirle a Apache que mirar en el lugar correcto, con el hash del directorio, etc. Por ejemplo, la línea:

VirtualDocumentRoot /http/users/%3.1/%3.2/%3

sería decirle a Apache para establecer la raíz del documento a / http / usuarios / s / u / subdominio cuando se le solicite para subdomain.yourdomain.com

Creo que el DNS comodín con el hosting virtual masa dinámica de Apache es una solución razonable también. Aunque, nunca he probado.

Si usted tiene la necesidad de escalar a varios servidores o las otras soluciones simplemente no funcionan para usted, le recomiendo usar un servidor DNS bases de datos. He utilizado con éxito MyDNS en el pasado. Puesto que utiliza MySQL (o PostgreSQL) puede actualizar su DNS sobre la marcha con PHP o cualquier otra cosa. El código no parezca que se ha actualizado desde hace tiempo, pero es DNS y por lo tanto no cortar exactamente borde.

comodín métodos de creación subdominio

En primer lugar usted tiene que crear la configuración de DNS usando el editor de DNS del servidor.

  1. Crear registro A en la configuración DNS con * anfitrión comodín en la dirección IP del servidor.

    * 1400 IN A ip_address

  2. Crea una vez más un registro A en la configuración DNS con @ anfitrión o en domain_name.tld dirección IP del servidor. TLD significa dominios de nivel superior o la extensión de los dominios como .com, .org, etc ....

    @ 1400 IN A ip_address        o  domain_name.tld 1400 IN A ip_address

  3. Crear registro CNAME como:

    www 1400 IN A domainname.tld

  4. Crea el subdominio comodín con * como *.domain.tld
  5. Crea .htaccess en el directorio de subdominio de *.domain.tld y poner este código:

    Options +FollowSymLinks 
    RewriteEngine On 
    RewriteBase /
    RewriteRule ^([aA-zZ0-9]+)$ index.php?data=$1
    RewriteCond %{HTTP_HOST} ^([aA-zZ0-9]+)\.([aA-zZ0-9-]+)\.([aA-zZ]+)
    RewriteRule ([aA-zZ0-9]+) index.php?data=%1
    

    Prueba de su primer subdominio comodín como example.domainname.tld

Si no está de interés para pasar los datos como parámetro mediante el .htaccess, también se puede obtener los datos mediante el uso de la codificación siguiente:

define("SUBDOMAIN_PARENT","domainname.tld");   
class getData
    {
         function __construct()
        {
            $this->data="";
            $http_host=$_SERVER['HTTP_HOST'];
         $subdom_data= str_replace(SUBDOMAIN_PARENT,"",$http_host);
         $expl_subdom_data=explode(".",$subdom_data);
      $expl_subdom_data=array_filter($expl_subdom_data);

            if($expl_subdom_data!=NULL)
            {
           $this->data=end($expl_subdom_data);
            }
       }
    }
$GLOBALS['get_data']=new getData();

y usar su variable global en cualquier lugar como global $get_data.

echo $get_data->data; //example

(Nota:.. Esta clase se utiliza principalmente para obtener el SUBDOMAINNAME exacta de http_host porque algunos nombres adicionales combinan antes de su subdominio es también aplicable como www.example.domainname.tld Este $_GET['data']='wwww' retorno Así que mi sugerencia es utilizar el $_SERVER['http_host'] para obtener los valores exactos en lugar de utilizando el $_SERVER['query_string'] o parámetros htaccess aprobadas en su página de índice)

6.Velocidad hasta la ejecución de este subdominios comodín utilizar N segundos en TTL -. Configuración de DNS

7.Compruebe el subdominio después de su hora de TTL (600 - 10 minutos) como => http://abc.domain.tld

(nota:. Subdominios comodín no anulan los subdominios existido Debido a que la primera prioridad siempre para sus subdominios existido)

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