Un subdominio puede ser de mucha utilidad a la hora de facilitar el acceso a una sección de nuestra web a los usuarios. El único problema es que es necesario por lo general crear otra página con su contenido propio y configurar unas cuantas cosas en ella si utilizamos un sistema CMS. Con estas instrucciones aprenderás a redireccionar tu subdominio a una carpeta o subcarpeta desde el archivo htaccess de apache.
Como habilitar htaccess en apache
Por supuesto lo primero que tienes que tener es habilitado el uso de .htaccess en tu servidor. En caso de no tenerlo será tan simple como entrar en el archivo de configuración de apache, que normalmente (en centos) se encuentra en
/etc/httpd/conf/httpd.conf
Lo editaremos y buscaremos la parte donde se indica AllowOverride None para nuestro host. Simplemente tendremos que cambiarla por All y reiniciar apache
AllowOverride All service httpd restart
De esta forma estaremos habilitando el uso de htaccess en apache para que no tengamos problemas más adelante.
Como hacer una redirección de un subdominio a una carpeta desde htaccess
Ahora sí ya nos metemos en materia. Simplemente tendremos que editar nuestro archivo .htaccess, que si no existe crearemos en la carpeta root de nuestro sitio. Supongamos que nuestra carpeta principal donde está todo el contenido es /var/www/vhosts/mipagina.com/httpdocs. Accederemos a ella y crearemos el archivo (o deditaremos) .htaccess
cd /var/www/vhosts/mipagina.com/httpdocs nano .htaccess
Ahora que ya lo tenemos abierto vamos a suponer que está vacío, por lo que su contenido debería quedar así:
Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} subdominio.mipagina.com [NC] RewriteRule ^(.*)$ [L,NC,QSA]
Explico todos los puntos de lo que vemos en el código anterior
- La primera y segunda línea (Options y RewriteEngine) sirven para habilitar la reescritura de urls.
- La siguiente línea RewriteCond creará una condición, lo que significa que siempre que la url llamada coincida con subdominio.mipagina.com se cumplirá y ejecutará la regla siguiente, sino simplemente la omitirá. [NC] sirve para que no distinga entre mayúsculas y minúsculas y los . sirven para escapar el punto ya que es un caracter especial de los rewrites.
- La última línea RewriteRule va a recoger cualquier contenido que enviemos contra ese subdominio con (.*), es decir, que si entramos a subdominio.mipagina.com/algomas, se guardará como variable la parte algomas y la incluiremos después. La siguiente parte es el destino , la subcarpeta a la que lo queremos enviar. El $1 sirve para colocar la variable que hemos dicho antes, por tanto al cargar el subdominio que he comentado lo redirigiría a algomas, por lo que podríamos entrar a cualqueir subcarpeta y archivo que se haya escrito en el navegador de forma automática. Por último [L,NC,QSA] significa:
- L = Última acción (si coincide y se redirecciona no sigue buscando más reglas, no hace falta)
- NC = No Case Sensitive, no distingue entre mayúsculas y minúsculas
- QSA = Recoge todas las variables query que podamos enviar, es decir, si mandamos ?var=algo, nos enviará también esto a la nueva dirección.
Así de simple resulta redirigir subdominios a carpetas. También podemos poner una url remota como nuestra página de facebook http://facebook.vichaunter.org por ejemplo.
Espero os sea de utilidad.
Ver comentarios (10)
Podrías enseñarme el contenido del .htaccess que subes?
Hola, muchas gracias por el artículo.
Quisiera plantearte una duda sobre algo que estoy tratando de hacer.
Quiero redireccionar todas las entradas que van a llamar a un subdominio virtual a una subcarpeta concreta.
Actualmente yo tengo una redirección hecha de la siguiente forma:
*.midominio.com --> redirige a
pero además quiero hacer el equivalente a esto:
*.midominio.com/subcarpeta_A --> redirige a
Desde cPanel hago el primer redireccionamiento pues es un subdominio "normal", pero si intento añadirle al subdominio la "/subcarpeta_A" no me lo permite.
¿Hay forma de hacer esto en .htaccess?
Muchas gracias y un saludo,
Elisur
Si no lo he entendido mal estás intentando redireccionar dos veces *.midominio.com a otro sitio, el problema es que las subcarpetas se tienen que redirigir de otra forma, has de ponerlas como rewrite.
Además cuando utilizas un comodín no puedes hacerlo directamente, sino que tienes que usar por ejemplo: (.*).midominio.com.
Al final debería ser algo así después de las redirecciones que tengas puestas:
RewriteEngine On
RewriteBase /
RewriteRule ^subcarpeta_A$ /subcarpeta_B [L,R]
Hola Buenas
He estado siguiendo las explicaciones y no logro redireccionar :(
El escenario es muy simple.
Necesitaría que cuando en el navegador se escribiese direccionIP/sitio/sitio
se reescribiera como: dominio/sitio/sitio/sitio
Sabrías decirme como debo configurarlo?
Muchas Gracias
Ahí donde tienes la dirección ip tienes un servidor web con apache? la regla deberías crearla en el directorio genérico que suele ser /var/www/html, es decir el que carga apache de forma predeterminada independientemente de los vhosts.
Se quedaría algo así:
RewriteCond %{HTTP_HOST} ^123.123.123.123
RewriteRule ^(.*)$ [R=301,L]
Buenas Joan,
Si no me equivoco debería funcionarte de la siguiente forma
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} subdominio.mipagina.com [NC]
RewriteRule ^(.*)$ http://www.vichaunter.com/subcarpeta/$1 [L,NC,QSA]
hola muy buen artículo
pero yo tengo un problema
y lo que necesito hacer es que cada subdominio menos el www. lo entienda como una variable...
o sea que si me entran con http://nombre1.dominio.com me muestra http://dominio.com/index,php?aff=nombre1
tengo que tener los subdominios creardos en el pandel de hosting para que me funcione?
muchas gracias
Buenas Joan,
Si no me equivoco debería funcionarte de la siguiente forma
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} subdominio.mipagina.com [NC]
RewriteRule ^(.*)$ http://www.vichaunter.com/subcarpeta/$1 [L,NC,QSA]
Como sería exactamete el mismo código pero con IP?
Quier hacer por ejemplo
En ves de esto:
http :// {IP}/subdir/archivo.html
Esto:
http :// {IP}/subdir/archivo/
Buenas Carlos,
lo que intentas realizar realmente es un rewrite de una carpeta a otra en lugar del subdominio, por lo que tu línea debería quedar de la siguiente forma:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^subdir/(.*).html$ subdir/$1/ [L]
Lo que hacemos es decirle que cualquier cosa que esté entre subdir/ y .html lo mande a subdir/loquesea/.
El .html es por que es un caracter especial y hay que escaparlo para que lo tome como un punto y no como una expresión regular.
Si tienes algún problema dime algo y lo vemos en profundidad pero debería funcionarte.