Cuando modificamos un htaccess debemos asegurarnos que debe ser subido en modo ASCII y aplicándole un chmod 644
##
# @version $Id: htaccess.txt 1005 2005-11-13 17:33:59Z stingrey $
# @package Joomla
# @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##
Options +FollowSymLinks
#
# mod_rewrite in use
#
RewriteEngine On
# Uncomment following line if your webserver’s URL
# is not directly related to physical file paths.
# Update YourJoomlaDirectory (just / for root)
# RewriteBase /YourJoomlaDirectory
#
# Rules
#
RewriteCond %{REQUEST_FILENAME} !\.(jpg|jpeg|gif|png|css|js|pl|txt)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php
El .htaccess afecta al directorio donde está incluido y todos sus subdirectorios que hay dentro de este. La mayoría de los comandos en el .htaccess deben ser escritos en una sola linea.
IMPORTANTE: Ten en cuenta que todos los servidores están configurado de forma distinta, por lo cual algunas instrucciones pueden no funcionar, incluso hay servidores donde deshabilitan e impiden la utilización de .htaccess
A continuación, listo las posibilidades de utilización de este archivo .htaccess que tienen que ver con la seguridad del sistema u otras funcionalidades:
Mensajes de Error personalizados
En lugar de utilizar las páginas de error predeterminadas por el servidor, podés utilizar tus propios mensajes para ello con el .htaccess. La sintaxis es la siguiente:
ErrorDocument 404 /error404.php
ErrorDocument 403 /error403.php
Bloquear el acceso público a determinados archivos
Con el siguiente código bloqueamos el acceso público desde el navegador hacia el archivo archivo.htm
order allow,deny
deny from all
Cambiar tu página de inicio por defecto
Normalmente, en la configuración de Apache suele estar este orden de páginas por defecto (en negrita):
#
# DirectoryIndex: Name of the file or files to use as a pre-written HTML
# directory index. Separate multiple entries with spaces.
#
DirectoryIndex index.htm, index.html, index.cgi, index.shtml, index.php
Utilizando el archivo .htaccess se puede especificar el nombre del archivo que debe entregar por defecto el servidor como índice del dominio, además de esto, puede darse un órden jerárquico para establecer cuál de los archivos debe tomarse primero, y cuáles siguen a este, en caso de no encontrarse.
Si por ejemplo, yo quiero utilizar una página por defecto que se llame por ejemplo joomla.html, en el archivo .htaccess voy a colocar la siguiente línea:
DirectoryIndex joomla.html
Esto hará que el servidor busque primero joomla.html. Si encuentra el archivo, lo mostrará. Si no la encuentra, enviará el error HTTP 404 (página no encontrada)
Para cambiar el orden de precedencia, listaremos luego del comando DirectoryIndex los archivos ordenados de izquierda a derecha, donde el archivo que esté en el extremo izquierdo será el primero que tomará el servidor, y el que se encuentre en el extremo derecho, será el último. Por ejemplo:
DirectoryIndex index.html index.php default.htm
Habilitar la exploración de directorios
Normalmente por razones de seguridad los administradores de servidor deshabilitan la posibilidad de explorar directorios via navegador. Esta opción permite navegar por la arborescencia de los directorios y archivos que no posean una página de índice, y ver los contenidos de cada directorio desde el navegador. Por ejemplo, si haces una petición http a un directorio como http://sitio.com/images/, se listarán los archivos jpg, gif y png que estén dentro de ese directorio sin la necesidad de que haya un archivo con links hacia las imágenes para poder observarlas desde el navegador.
Esta opción se activa con el siguiente comando:
Options +Indexes
Tal vez te has preguntado en alguna ocasión: ¿por qué dentro de los directorios de Joomla existen archivos index.html vacíos?. Precisamente para evitar la exploración por directorios cuando esta opción está desactivada!!
Si accedes por ejemplo a http://www.sitio-joomla.com/templates/ solo verás una página en blanco (el index.html) si la exploración de directorios está activada, y un error 403 Forbbiden, si la exploración de directorios está deshabilitada.
Bloqueando a diferentes usuarios para acceder al sitio
Si deseas denegar el acceso alguien en particular necesitas saber la dirección de IP o el dominio desde el cual se conecta a Internet. Los comandos son los siguientes (para denegar el acceso al IP 200.125.234.111, al rango de 209.13.51.000 al 209.13.51.999, y a los usuarios de Speedy):
order deny,allow
deny from 200.125.234.111
deny from 209.13.51.
deny from .speedy.com.ar
allow from all
Cuando estos denegados intenten acceder al sitio recibirán un error HTTP 403 (Acceso prohibido).
Redireccionar visitantes a una nueva página o directorio
Si tenés una página vieja llamada vieja.html y esta va a ser reemplazada por una nueva llamada nueva.html, la sintaxis es: Redirect permanent /vieja.html http://www.misitiojoomla.com/nueva.html
Si has renombrado un directorio, podés usar una linea de redirección para contemplar todas las páginas dentro de ese directorio.
Redirect permanent /directorioviejo http://www.misitiojoomla.com/directorionuevo/
Ten en cuenta que la vieja página o directorio está especificada utilizando la ruta relativa al directorio raiz del sistema, mientras que la nueva página o directorio se especifican con la URL absoluta.
Prevenir el Hot Linking y el robo de nuestro ancho de banda
Para evitar que otros sitios linken directamente a imágenes del nuestro, y de esa manera gasten parte de nuestro tráfico mensual permitido, tenemos que hacer:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?misitiojoomla.com/.*$ [NC]
RewriteRule .(gif|jpg)$ – [F]
Alternativamente, se puede mostrar una imágen en las páginas hot-linkeadas, por ejemplo, una imágen que diga: «Esta imágen ha sido sustraida sin permiso de www.misitiojoomla.com», para esto, el .htaccess deberá tener el siguiente código:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?misitiojoomla.com/.*$ [NC]
RewriteRule .(gif|jpg)$ http://www.misitiojoomla.com/no-robes.gif [R,L]
donde no-robes.gif es la imágen que va a aparecer en los sitios que tengan páginas hot-linkeadas al nuestro.
Protegiendo el directorio /administrator/ mediante autenticación HTTP
Una medida de seguridad adicional es proteger el directorio /administrator/ utilizando el .htaccess
Agrega para esto las siguientes lineas en el .htaccess que luego ubicarás en tu directorio /administrator/
AuthType Basic
AuthName «Area restringida a administradores»
AuthUserFile /.htpasswds/usuarios.pwd
require valid-user
Adicionalmente debes crear un archivo simple de texto que contenga los usuarios y passwords con autorización para acceder al directorio /administrator/
Para este ejemplo lo llamaremos «usuarios.pwd». Este archivo debe colocarse en otro directorio fuera de public_html, en el ejemplo: .htpasswds
Podés generar estos archivos utilizando htpasswd de Apache o esta herramienta online:
http://www.eftel.com/cgi-bin/user_add.cgi que generará un password encriptado para cada usuario.
Una línea del archivo usuarios.pwd puede ser:
usuario:AF2PLEE4xyp0Q
Para evitar que exploren nuestros directorios haremos
IndexIgnore *