.htaccess, el fichero que te permite un mayor control sobre tu servidor web con Apache y que es realmente útil para hacer muchas cosas interesantes. En este artículo podrás encontrar 10 11 trucos para tu .htaccess que todo desarrollador debería tener en su lista de favoritos.
Antes de editar tu .htaccess, recuerda siempre hacer una copia de seguridad por si necesitas restaurar y volver atrás.
Eliminar www en la url
Por razones de SEO, muchas veces tenemos que quitar o poner las www en nuestras url. El siguiente truco te ayuda a eliminar por defecto la www y que todas tus url sean sin www para la indexación, es fácil cambiarlo para que sean todas con www.
RewriteEngine On RewriteCond %{HTTP_HOST} !^tu-sitio.com$ [NC] RewriteRule ^(.*)$ http://tu-sitio.com/$1 [L,R=301]
fuente: http://css-tricks.com/snippets/htaccess/www-no-www/
Prevenir el hotlinking
El Hotlinking es una mala práctica que consiste en que otros sitios hacen uso de tus imagenes y contenidos enlazando directamente a ellos. Cuando esto sucede consumen tu ancho de banda sin control y sin que tengas visitas en tu sitio web. Por eso hay que prevenir el hotlinking si ves que están abusando de ti. El siguiente truco para .htaccess es realmente útil, solo tienes que poner tus urls.
RewriteEngine On #Remplaza ?misitio\.com/ con la direccion de tu blog RewriteCond %{HTTP_REFERER} !^http://(.+\.)?misitio\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ #Remplaza /images/nohotlink.jpg con las imagen que diga "no me enlaces asi" RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
Redireccionar los feeds de WordPress a feedburner
Muchos bloggers usamos feedburner, un servicio web que mucha gente utiliza para leer nuestros blogs vía rss. Si estas usando WordPress, necesitarás redireccionar los feeds (rss, atom, etc.) a tu dirección de feedburner. Solo tienes que modificar las líneas 2 y 3, y poner este código en tu .htaccess. También hay plugins para hacer esto esto, pero quizás mejor sin plugins.
<IfModule mod_alias.c> RedirectMatch 307 /feed/(atom|rdf|rss|rss2)/?$ http://feedburner.com/tufeed/ RedirectMatch 307 /comments/feed/(atom|rdf|rss|rss2)/?$ http://feedburner.com/tufeed/ </IfModule>
Gracias por la recomendación de @InerciaCreativa de cambiar la redirección 301 por una 307 porque si decides cambiar de servicio de feeds que pasaría.
Fuente: http://www.wprecipes.com/how-to-redirect-wordpress-rss-feeds-to-feedburner-with-htaccess
Crear páginas de error personalizadas
Aburrido de las páginas de error de siempre. Pues solo tienes que crear tus propias páginas html para los errores típios y poner esto en el fichero .htacces.:
ErrorDocument 400 /errors/badrequest.html ErrorDocument 401 /errors/authreqd.html ErrorDocument 403 /errors/forbid.html ErrorDocument 404 /errors/notfound.html ErrorDocument 500 /errors/serverr.html
Fuente: http://css-tricks.com/snippets/htaccess/custom-error-pages/
Forzar la descarga de ficheros especificados
Cuando ofrecemos ficheros como mp3, videos, eps, psd o xls, para descargar desde nuestro sitio web, nos interesa que se descarguen siempre y no se abran en el navegador. Para esto con este truco podemos forzar la descarga de ficheros .xls y .eps desde nuestro servidor.
<Files *.xls> ForceType application/octet-stream Header set Content-Disposition attachment </Files> <Files *.eps> ForceType application/octet-stream Header set Content-Disposition attachment </Files>
Fuente: http://www.givegoodweb.com/post/30/forcing-a-download-with-apache-and-htaccess
Log de errores de PHP
Otro interesante truco es como controlar los errores de php en un fichero de log. Podemos crear un php_error.log y ponerlo donde quedamos, solo tienes que añadir estas líneas a tu .htacces. No te olvides de modificar la ruta en la línea 7.
# visualizar no errs to user php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off # log a fichero php_flag log_errors on php_value error_log /ruta/php_error.log
Fuente: http://css-tricks.com/snippets/htaccess/php-error-logging/
Eliminar las extensiones de fichero en las urls
Las extensiones de ficheros son útiles para los desarrolladores, pero no suelen aportar nada a los visitantes de tu sitio web. Este truco permite eliminar las extensiones .html de tus ficheros web. Además este código se puede implantar de forma sencilla también para eliminar la extensión .php.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.html -f RewriteRule ^(.*)$ $1.html # Reemplaza html con otras extensión como: php, htm, asp
Fuente: http://eisabainyo.net/weblog/2007/08/19/removing-file-extension-via-htaccess
Prevenir listados de directorio
En nuestros servidores web cuando no tenemos un fichero index se pueden listar los ficheros automáticamente y esto puede resultar incluso un problema de seguridad. Por eso para evitar los listados si nos falta el index solo hay que añadir esta línea a nuestro .htaccess.
Options -Indexes
Reducir el peso por compresión de datos estáticos
Conoces que es posible comprimir los datos que enviamos a nuestros visitantes, y que serán descomprimidos directamente por el navegador del usuarios. Este código te puede ser útil para ahorrar ancho de banda y reducir el peso de tus páginas. Normalmente si usas WordPress y hacer cacheo ya está comprimiendo las páginas.
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Añadir automáticamente el juego de caracteres utf-8 a tus ficheros
Si tienes problemas de codificación, puedes forzar la codificación a través de tu .htacces. Aquí tienes un ejemplo para forzar utf-8.
<FilesMatch "\.(htm|html|css|js)$"> AddDefaultCharset UTF-8 </FilesMatch>
fuente: http://www.askapache.com/htaccess/setting-charset-in-htaccess.html
Bloquear IPs para que no vean tu sitio web
También puedes bloquear un IP concreta para que no pueda acceder a tu contenido. Muy útil por seguridad para zonas de administración pero también si detectas el abuso desde IPs fijas concretas.
deny from ###.###.###.###
O también puedes redirigir determindas IPs hacia otra web:
RewriteCond %{REMOTE_ADDR} ^1\.1\.1\.1$ [OR] RewriteCond %{REMOTE_ADDR} ^2\.2\.2\.2$ [OR] RewriteCond %{REMOTE_ADDR} ^3\.3\.3\.3$
RewriteRule .* https://www.gdt.guardiacivil.es/webgdt/home_alerta.php [R,L]
fuente: http://www.fernandogomez.es/denegar-ip-por-htaccess-o-redirigir-por-ip-a-otra-web-10828 ¡Gracias Fernando!
fuente en inglés: cats who code y otras más.