Leyendo la documentación de Apache averiguas configuraciones interesantes que se pueden realizar, por ejemplo puede evitar que se ejecuten scripts, de todos modos en el fichero de configuración inicial se necesita de la correcta configuración de algunas directivas para que lo que tu puedas hacer en tu .htaccess tenga efecto. Si pones en práctica algo de lo que veas aquí y no te funciona, probablemete tengas que contactar con tu hosting, que le vamos hacer! Veamos sin más ejemplos de cosas que si puedes hacer:
1. Mover un sitio:
Las hay muy variadas, la situación más habitual es mover un sitio a otro servidor y por el camino te encuentra con que el nombre del dominio a cambiado. Pero quieres que te encuentren por los dos dominios. Por ejemplo yo tengo un dominio con mi nombre completo y he realizado una redirección a otro dominio con mi nombre algo más corto. El siguiente código es el que he puesto en el dominio http://www.miguel-angel-valero.es. Puedes hacerlo permantente declarando este traslado como una redirección 301, es decir utilizas R=301 en lugar de sólo R en la expresión siguiente.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.miguel-angel-valero.es$ [NC]
RewriteRule ^(.*)$ https://www.miguel-valero.es/$1 [R=301,L]
Puedes introducir http:www.miguel-angel-valero.es y serás redirigido a www.miguel-valero.es. Nota mi hosting no necesita la inclusión de «Options +FollowSymlinks» en el htaccess otros en cambio si necesitan esta inclusión.
2. Hacer que tu sitio sea «www.sitio.com» aunque la gente utilice «sitio.com»:
Pues dependiendo de si tu servidor utiliza el puerto 80 o no:
# For sites running on a port other than 80
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://www.example.com:%{SERVER_PORT}/$1 [L,R]
# And for a site running on port 80
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.example.com/$1 [L,R]
3. Haz lo anterior de forma permanente:
Si estás seguro de que esto es algo permanente entonces declara la redirección como 301, por ejemplo si utilizas el puerto 80 que es por defecto basta con hacer:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^miguel-valero.es$ [NC]
RewriteRule ^(.*)$ https://www.miguel-valero.es/$1 [R=301,L]
Esto hace que si pones en el navegador https://www.miguel-valero.es, aparecerá https://www.miguel-valero.es/.
4. A la inversa:
es decir de www a sin www, yo no lo recomiendo pero si lo necesitas, sería:
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_HOST} ^www\.dominio\.com$ [NC]
RewriteRule ^(.*)$ http://dominio.com/$1 [R=301,L]
Nota: Recuerda retirar Options +FollowSymLinks si tienes un error
5. Añadir la «/» al final.
Algunas configuraciones en el servidor no están bien realizadas y a veces te encuentras con que cuando pones: https://www.miguel-valero.es/seo-adictos-24h, s decir no pones la barra inclinada al final, el servidor si no está bien configurado, intentará encontrar un fichero»seo-adictos-24h» y al no encontrarlo tendrás un error que no es bueno ni para tí ni para el usuario que lo origina, ya que se lleva una mala impresión de tu sitio. Esto normalmente no suele ocurrir, pero si te encuentras este problema puede arreglarse haciendo:
RewriteEngine on
RewriteBase /~miguel-valero.es/
RewriteRule ^seo-adictos-24h$ seo-adictos-24/ [R]
6. Archivos cambiado de nombre.
Otro tema que te puedes encontrar, resulta que tienes un archivo que ha cambiado de nombre y no tienes permiso para editarlo, y resulta que esto te va a producir un buen número de enlaces rotos, pues no hay problema. Esto tambien lo puedes arreglar:
RewriteEngine on
RewriteBase /~directorio/
RewriteRule ^viejofichero.html$ nuevofichero.html [R]
7. En otras ocasiones necesitas ofrecer el contenido de tu web en función del navegador que te visita:
por ejemplo navegadores propios de dispositivos móviles, pues esto también lo puedes forzar editando el .htaccess, veanse algunos ejemplos tomados directamente de la documentaciónd de Apache:
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/3.*
RewriteRule ^foo.html$ foo.NS.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx/.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/[12].*
RewriteRule ^foo.html$ foo.20.html [L]
RewriteRule ^foo.html$ foo.32.html [L]
8. Pretty Urls:
Finalmente uno de los usos más interesantes que podemos hacer en este archivo es realizar lo que se conoce como pretty urls o urls bonitas. Es decir si tienes un cms que te produce direcciones del tipo: «http://www.sitio.com/index.php?page=productos» para poder convertir esto en: «http://www.sitio.com/productos/» esto se hace como sigue:
RewriteEngine on
RewriteRule page/([A-Za-z0-9]*)/ index.php?page=$1
9. Error 404:
Incluyo el aporte de 4seo que comenta como personalizar las páginas de error, en esto caso el error 404 que se origina cuando una página no es encontrada.
#Redireccion pagina no encontrada, cambiar la extension si procede
ErrorDocument 404 /404.php
10. Evitar solicitudes de descarga:
Es decir no se muestre el pop up que te solicita la descarga si el enlace enlaza un archivo (pdf, doc, etc.).
AddType application/octet-stream .csv
AddType application/octet-stream .xls
AddType application/octet-stream .doc
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
AddType application/octet-stream .mov
AddType application/octet-stream .pdf
Encuentro este tema también muy interesante, realmente a través de .htaccess si lo permiten las directivas declaradas en httpd.conf, se puede hacer mucho más, también administrar el servidor, por ejemplo rebalancear la carga por ejemplo. Otra cosa que no he comentado es que puedes preveer los errores en algunas de las rutas y si reescribes bien en .htaccess evitarás menores errores 404 (página no encontradas) y mejoraras la experiencia de los usuarios de tu sitio. Puedes echar un vistazo a los logs de errores de página de tu propio servidor para ver si hay alguna url que se repite mucho. Bueno esto ha sido todo. Saludos!
Atentamente
Miguel Valero programador web y analista seo en Valencia
PD: Si necesitas ampliar más sobre este tema te invito a consultar la fuente original, es decir la documentación de apache (en inglés). Documentación de Apache
Siento la tardanza, ya no sé de donde sacar el tiempo. ¿Que quieres hacer exactamente cuando detectes un móvil? Saludos
Hola.. alguna sugerencia para arreglar este problema en mi host
ejemplo
http://www.pagina.com/libro.php OK
pero cuando pones
http://www.pagina.com/libro.php/libro.php como encuentra el file se muestra mal
como hacer una regla que no muestre nuca esos casos de file.php/file.php/file.php/…
Gracias!
Perdona se me había pasado responderte, no entiendo tu pregunta pues no puedes poner una url tipo http://www.pagina.com/libro.php/libro.php pues «libro.php» no es un directorio si no un recurso, en este caso un documento php, por tanto sencillamente ese tipo de urls no deben componerse, pon un ejemplo de la url original y de la url que quisieras tener si todavía te interesa una respuesta.
Hola, estoy empezando con .htaccess, y me encuentro con el primer problema que no logro solucionar. Hice una instalación drupal en un subdirectorio, y ahora lo único que quiero es redireccionar a ese subdirectorio pero sin que se muestre en la URL. Es decir, tengo http://www.midominio.com/subdirectorio/index.php, lo que quiero es que al escribir http://www.midominio.com me redireccione al index que contiene el subdirectorio pero, que en la URL solo muestre http://www.midominio.com.
Este es el código que utilizo en el .htaccess:
Options +FollowSymLinks
RewriteEngine on
RewriteBase /drupal
RewriteCond %{HTTP_HOST} ^midominio.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.midominio.com$
RewriteCond %{REQUEST_URI} !^/subdirectorio/
RewriteRule (.*) /subdirectorio/$1 [L]
y me devuelve:
midominio.com/subdirectorio/subdirectorio/subdirectorio/subdirectorio/subdirectorio/subdirectorio/subdirectorio/subdirectorio/subdirectorio/
Gracias de antemano.
Hola
Quisiera saber si sabéis como conseguir que en lugar de ver una url por ejemplo 88.34.1.1 se vea http://www.mipagina.com, sin tener un dominio.
Tengo que redireccionar unas paginas desde la web de mi empresa a un servidor local y no quiero que se vea la IP del nuevo servidor.
Si no tienes dominio asignado una forma de hacerlo es asociar de manera manual la ip de la página donde esté alojada. Es decir debes añadir la línea IP http://www.mipagina.com al final de tu archivo hosts, donde IP es el número IP que tengas asignado. Podrás entonces ver http://www.mipagina.com en el navegador del ordenador donde edites dicho archivo, y sólo en ese equipo. Saludos.
Gracias por la respuesta, aunque no me soluciona el problema.
Traslada el dominio pues….
Hola muy buen articulo, necesito configurar el .htaccess para que las imagenes, js y css se incluyan en cache. Sabes como hacer esto?, gracias.
Claro. Declarar la expiración de encabezados es muy fácil. De esta manera le dices al ordenador del usuario que ya ha visitado el sitio que no pida el recurso si no ha pasado el tiempo establecido para ello. Por ejemplo ya declaras el tiempo que creas para recurso. Esta es una manera pero hay otras formas de hacerlo. Espero que te sirva
#añadimos expiración a los headers
ExpiresActive On
ExpiresDefault «access plus 1 day»
ExpiresByType image/png «access plus 1 month»
ExpiresByType image/jpg «access plus 1 month»
ExpiresByType image/jpeg «access plus 1 month»
ExpiresByType image/gif «access plus 1 month»
ExpiresByType image/ico «access plus 1 month»
ExpiresByType application/javascript «access plus 1 month»
ExpiresByType text/css «access plus 1 month»
ExpiresByType image/x-icon «access plus 1 year»
ExpiresByType application/javascript «modification plus 2 weeks»
ExpiresByType text/css «modification plus 14 days»
Muy valiosa la información e importante empaparse de ella para cambios que nos pueden ayudar en nuestros sitios, me llama la antención el punto para realizar enlaces bonitos (pretty urls) esto ayuda mucho al seo y también comparto la opinion de aplicaciones android.. ¿es posible de alguna manera mediante htaccess realizar la acción de 2 o mas idiomas al momento que un cliente de china nos visite? así vería el sitio en chino… y las ventas se incrementarían… saludos y exitos.
Me gustaría saber si se puede configurar el htaccess para que en función de donde venga el visitante se active un idioma u otro
Por supuesto ya comenté en articulo anterior la importancia de ofrecer una página personalizada en el caso de errores del servidor, por ejemplo el de página no encontrada o error 404. También considero importante incluir un menú de navegación en dicha página para que el usuario pueda seguir navegando. Me parece tan bueno tu comentario que voy a tener que incluirlo en el post y renombrarlo a: «10 cosas que puedes hacer en tu .htaccess». Saludos!
Muy útil la información, también considero muy importante configurar y personalizar la pagina de error 404. Con este simple codigo enviaremos todas las peticiones erroneas a nuestra pagina personalizada.
#Redireccion pagina no encontrada, cambiar la extension si procede
ErrorDocument 404 /404.php