X

Redireccionar un subdominio a una carpeta con .htaccess y apache

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.

VicHaunter:
    Categorías: Ayuda

Ver comentarios (10)

  • 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]

  • 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.

Artículo relacionado
Los comentarios de Disqus están cargando....

Como todos, usamos cookies.