Trucos para tu .htaccess

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