subdomain - Subdominios comodín
localhost wildcard (8)
Primero, quiero permitir que los usuarios publiquen páginas y darles a cada uno un subdominio de su elección (ej: usuario.mysite.com). Según lo que puedo deducir, la mejor manera de hacerlo es mapear user.mysite.com a mysite.com/user con mod_rewrite y .htaccess - ¿es correcto?
Puede ser mejor usar servidores virtuales . De esta forma, cada usuario puede tener una configuración de servidor web bastante independiente de los demás.
La sintaxis es algo como esto:
<VirtualHost *:80> DocumentRoot /var/www/user ServerName user.mysite.com ... </VirtualHost>
Sé que ha habido algunos temas sobre esto antes, pero he intentado absolutamente todo lo sugerido (que pude encontrar) y nada me ha funcionado hasta ahora ...
Con eso en mente, esto es lo que estoy tratando de hacer:
Primero, quiero permitir que los usuarios publiquen páginas y darles a cada uno un subdominio de su elección (ej: usuario.mysite.com). Según lo que puedo deducir, la mejor manera de hacerlo es mapear user.mysite.com a mysite.com/user con mod_rewrite y .htaccess - ¿es correcto?
Si eso es correcto, ¿alguien me puede dar instrucciones explícitas sobre cómo hacer esto?
Además, estoy haciendo todo mi desarrollo localmente, usando MAMP, así que si alguien pudiera decirme cómo configurar mi entorno local para que funcione de la misma manera (he leído que esto es más difícil), lo agradecería mucho. Honestamente, he intentado todo sin ningún resultado, y como esta es la primera vez que hago algo así, estoy completamente perdido. ¡Muchas gracias por cualquier ayuda!
Actualización: Algunas de estas respuestas han sido REALMENTE útiles, pero para el sistema que tengo en mente, agregar manualmente un subdominio para cada usuario no es una opción. Lo que realmente estoy preguntando es cómo hacerlo sobre la marcha, y redirigir wildcard.mysite.com a mysite.com/wildcard: la configuración de Tumblr es un ejemplo perfecto de lo que me gustaría hacer. ¡Gracias de nuevo!
En cuanto a cómo configurar el comodín del subdominio DNS, eso sería una función de su proveedor de alojamiento DNS. Esto sería pasos diferentes dependiendo de qué proveedor de hosting tiene y sería una mejor pregunta para ellos.
Una vez que haya configurado eso con el host DNS, desde su aplicación web realmente solo está reescribiendo URL, lo cual se puede hacer con algún tipo de módulo para el servidor web, como por ejemplo reescribir si está en IIS (esto sería la ruta preferida si es posible). También podría manejar la reescritura a nivel de la aplicación también (como usar enrutamiento si en ASP.NET).
Debería volver a escribir la URL para que http://myname.domain.com se convierta en http://domain.com/something.aspx?name=myname o algo así. Desde allí en adelante, simplemente lo maneja como si el valor de myname estuviera en la cadena de consulta de forma normal. ¿Tiene sentido? Espero no haber entendido mal lo que buscas.
Editar:
No estoy sugiriendo que cree un subdominio para cada usuario, sino que cree un subdominio de comodín para el dominio en sí, de modo que cualquier elemento .dominio.com (básicamente * .dominio.com) vaya a su sitio. Tengo varios dominios configurados con mydomain . Sus instrucciones para configurar esto es así:
Sí, puede configurar un comodín pero solo funcionará si lo configura como un registro A. Los comodines no funcionan con un C Nombre. Para usar un comodín, usa el carácter astericks ''*''. Por ejemplo, si crea y A Graba usando un comodín, .domain.com, todo lo que se ingrese en el lugar donde se encuentra el '' '', se resolverá en la dirección IP especificada. Entonces, si ingresa ''www'', ''ftp'', ''sitio'' o cualquier otra cosa antes del nombre de dominio, siempre se resolverá en la dirección IP
Tengo algunos que están configurados de esta manera, teniendo * .dominio.com ir a mi sitio. Luego puedo leer la URL base en mi aplicación web para ver que ryan.domain.com es a lo que se accedió actualmente, o que bill.domain.com es lo que se usó. Entonces puedo:
- Use la reescritura de URL para que el subdominio se convierta en una parte de la cadena de consulta O
- Simplemente lea el valor de host de la URL accedida y realice un poco de lógica en función de ese valor.
¿Tiene sentido? Tengo varios sitios configurados exactamente de esta manera: crea el comodín para el dominio con el host DNS y luego simplemente lee el host o el dominio base de la URL para decidir qué mostrar según el subdominio (que en realidad era un nombre de usuario) )
Editar 2:
No hay forma de hacer esto sin una entrada de DNS. El "mundo en línea" necesita saber que name1.domain.com, name2.domain.com, ..., nameN.domain.com todos van a la dirección IP de su servidor. La única forma de hacerlo es con la entrada de DNS adecuada. Debe agregar la entrada DNS comodín para su dominio con su host DNS. Entonces solo es cuestión de que lea el subdominio de la URL y tome las medidas adecuadas en su código.
Lo mejor que puede hacer si está ejecutando * AMP es hacer lo que Thomas sugiere y hacer hosts virtuales en Apache. Puede hacer esto con o sin la redirección que describe.
Hosts virtuales
Lo más probable es que desee hacer hosts virtuales basados en nombres , ya que es más fácil de configurar y solo requiere una dirección IP (por lo que también será fácil de configurar y probar en su máquina MAMP local). Los hosts virtuales basados en IP son mejores en algunos otros aspectos, pero debe tener una dirección IP para cada dominio.
Esta página de Wikipedia discute las diferencias y enlaces a un buen recorrido básico de cómo hacer fantasmas basados en nombres en la parte inferior.
En su máquina local para probar, también tendrá que configurar nombres falsos de DNS en / etc / hosts para sus nombres de dominio de prueba falsos. es decir, si tiene Apache escuchando en localhost y configura vhost1.test.domain y vhost2.test.domain en sus configuraciones de Apache, simplemente debe agregar estos dominios a la línea 127.0.0.1 en / etc / hosts, después de localhost:
127.0.0.1 localhost vhost1.test.domain vhost2.test.domain
Una vez que haya hecho la edición / etc / hosts y haya agregado las configuraciones del host virtual basado en el nombre a su (s) archivo (s) de configuración de Apache, eso es todo, reinicie Apache y sus dominios de prueba deberían funcionar.
Redirigir con mod_rewrite
Si desea hacer redirecciones con mod_rewrite (para que user.example.com no se aloje directamente y, en su lugar, redirija a example.com/user), también necesitará hacer una RewriteCond para hacer coincidir el subdominio y redirigirlo:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain/.example/.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]
Puedes poner esto en .htaccess o en tu configuración principal de Apache.
Deberá agregar un par de reglas como las dos últimas para cada subdominio que desee redireccionar. O bien, puede capturar el subdominio en RewriteCond para poder usar una regla comodín para redirigir * .example.com a example.com/ * - pero eso huele realmente mal desde el punto de vista de la seguridad.
Todos juntos, vhosts y redirigir
Es mejor ser más explícito y configurar una sección de configuración de host virtual para cada nombre de host que desee escuchar, y poner las reglas de reescritura para cada uno de estos nombres de host dentro de su configuración de host virtual. (Siempre es más seguro y más rápido colocar este tipo de cosas dentro de su configuración de Apache y no .htaccess, si puede ayudarlo - .htaccess reduce el rendimiento porque Apache está constantemente rastreando el sistema de archivos para archivos .htaccess y reparsing them, y es menos seguro porque los usuarios pueden arruinarlo).
Todos juntos de esa manera, la configuración de vhost dentro de sus configuraciones de Apache sería:
NameVirtualHost 127.0.0.1:80
# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /www/siteroot
# etc.
</VirtualHost>
# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
ServerName vhost1.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>
# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
ServerName vhost2.example.com
RewriteEngine On
RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>
Por lo que he visto en muchos webhosts, configuraron un host virtual en apache.
Entonces, si su www.misitio.com se sirve desde / var / www, puede crear una carpeta para cada usuario. Luego asigne el host virtual a esa carpeta.
Con eso, funcionan tanto mysite.com/user como user.mysite.com.
En cuanto a su entorno de prueba, si está en Windows, le sugiero que modifique su archivo HOSTS para asignar a mysite.com a su PC local (127.0.0.1), así como a cualquier subdominio que configure para la prueba.
Tenía que hacer exactamente lo mismo para uno de mis sitios. Puedes seguir los siguientes pasos
Si tiene cPanel en su servidor, cree un subdominio
*
, si no, tendría que configurar un registro A en su DNS (para BIND ver http://ma.tt/2003/10/wildcard-dns y subdominios / ). En tu desarrollador Sería mucho mejor que falsificar los subdominios agregando cada uno a su archivo dehosts
.(Si usó cPanel, no tendrá que hacer esto). Deberá agregar algo como lo siguiente a su archivo de fantasmas de apache. En gran medida, depende del tipo de servidor (compartido o no) que esté ejecutando. EL SIGUIENTE CÓDIGO NO ESTÁ COMPLETO. ES SÓLO PARA DAR DIRECCIÓN. NOTA:
ServerAlias example.com *.example.com
es importante.<VirtualHost 127.0.0.1:80> DocumentRoot /var/www/ ServerName example.com ServerAlias example.com *.example.com </VirtualHost>
A continuación, ya que puede usar el script PHP para verificar el encabezado "Host" y descubrir el subdominio y publicar contenido en consecuencia.
Encontrará tantos documentos para implementar subdominios comodín en el servidor de producción o de transición. Aquí hay un enlace donde encontré exactamente cómo aplicar subdominios comodín en el servidor local y en el servidor wamp.
http://info4admins.com/wildcard-domains-dns-and-local-wamp-for-website-development/
Estoy en Ubuntu 16.04 y desde el 14.04 uso la solución provista por Dave Evans y funciona bien para mí.
Instalar
dnsmasq
sudo apt-get install dnsmasq
Cree un nuevo archivo
localhost.conf
bajo/etc/dnsmasq.d
dir con la siguiente línea#file /etc/dnsmasq.d/localhost.conf address=/localhost/127.0.0.1
Edite
/etc/dhcp/dhclient.conf
y agregue la siguiente líneaprepend domain-name-servers 127.0.0.1;
(Probablemente encontrará que esta línea ya está allí y solo necesita descomentarla).
El último es reiniciar el servicio
sudo systemctl restart dnsmasq sudo dhclient
Finalmente, debes verificar si funciona.
dig whatever.localhost
Nota:
Si desea usarlo en su servidor web, simplemente necesita cambiar el 127.0.0.0
a su dirección IP real.
Me doy cuenta de que llegué bastante tarde respondiendo a esta pregunta, pero tenía el mismo problema con respecto a una solución de desarrollo local. En otro hilo SO encontré mejores soluciones y pensé que las compartiría para cualquier persona con la misma pregunta en el futuro:
VMware posee un comodín que resuelve cualquier subdominio a 127.0.0.1:
vcap.me resolves to 127.0.0.1
www.vcap.me resolves to 127.0.0.1
o para mayor versatilidad 37 Signals posee un dominio para mapear cualquier subdominio a cualquier IP dada usando un formato específico:
127.0.0.1.xip.io resolves to 127.0.0.1
www.127.0.0.1.xip.io resolves to 127.0.0.1
db.192.168.0.1.xip.io resolves to 192.168.0.1
vea xip.io para más información