En este tutorial vamos a explicar cómo se configura el fichero ‘.htaccess‘. Principalmente nos hemos guiado por este otro.
Estos ficheros son conocidos también como ‘archivos de configuración distribuida‘. Permiten cambiar diferentes directivas a nivel de directorio en un servdior sin necesidad de cambiar la configuración propia del servidor. El formato de estos ficheros es como el del fichero de configuración de Apache. Estos ficheros suelen agregarse en el raíz del servidor y desde ahí gestionar cada directorio y subdirectio que contenga, aunque se puede ubicar un .htaccess en cualquier directorio.
Estos ficheros se suelen emplear para:
- Redireccionar tráfico
- Reescritura de URL
- Compresión de ficheros para reducir el tiempo de carga
- Bloquear acceso a directorios
Ahora vamos a hablar de unos cuantos ‘trucos’ para configurar estos ficheros:
- Indicar la página por defecto que se ejecutará al acceder al raíz del servidor:Apache configuration |copy code |?
1 2 DirectoryIndex index.html index.php index.htm
3 - Página de error por defecto a la que se redirigen todos los errores 404:Apache configuration |copy code |?
1 2 ErrorDocument 404 /miPaginaDeError.html
3 - Controlar acceso a fichero y directorios, permitiendo o denegando dicho acceso. Situando un fichero ‘.htaccess’ en una carpeta con este contenido se bloquearía el acceso a la misma y a todos sus ficheros a todo el mundo:
Si queremos bloquear el acceso a todo el mundo pero exceptuando ciertas dirección IPs habría que añadir las siguientes líneas:Apache configuration |copy code |?1 2 # Bloquear el acceso a todo el mundo
3 deny from all
4 Apache configuration |copy code |?1 2 # Bloquear el acceso a todo el mundo
3 order deny,allow
4 deny from all
5 # Dirección a la que si le vamos a permitir acceder
6 allow from 192.168.0.0/24
7 El caso contrario al anterior sería bloquear el acceso únicamente a una dirección IP, y se configuraría de la sigiuente manera:
Apache configuration |copy code |?1 2 order allow,deny
3 # Dirección que queremos bloquear
4 deny from 192.168.0.0/24
5 # Permitir el acceso al resto
6 allow from all
7 - Modificar las variables de entorno, permitiendo agregar (‘setenv’) o eliminar (‘UnSetEnv’) ciertas variables:Apache configuration |copy code |?
1 2 #Añadir nueva variabel
3 SetEnv SITE_WEBMASTER "Developando"
4 SetEnv SITE_WEBMASTER_URI mailto:[email protected]
5 6 #Eliminar variable
7 UnSetEnv REMOTE_ADDR
8 - Redicciones permanentes (301) de una página a otra dentro de un mismo servidor. Para ello añadir la siguiente línea:
También nos podría interesar redireccionar todo el contenido de alguna carpeta. Por ejemplo para redireccionar el tráfico a nuestro blog (‘/blog/’) al raíz del sevidor habría que utilizar:Apache configuration |copy code |?1 2 #Redirect <codigo> <url_antigua> <nueva URL>
3 Redirect 301 /antiguo/index.html http://miDominio.com/nuevo/index.html
4 Apache configuration |copy code |?1 2 #Redirect <codigo> <url_antigua con patrón> <nueva URL>
3 RedirectMatch 301 /blog(.*) http://yourdomain.com/$1
4 - Configurar la caché de ficheros, configurando el tipo de ficheros que se quiere cachear y el tiempo que dichos contenidos deben permanecer en la caché antes de ser consultados de nuevo:Apache configuration |copy code |?
01 02 # Mantener en caché durante un año
03 <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">
04 Header set Cache-Control "public"
05 Header set Expires "Thu, 25 Apr 2014 12:00:00 GMT"
06 Header unset Last-Modified
07 </FilesMatch>
08 09 # Mantener en caché durante 2 horas
10 <FilesMatch "\.(html|htm|xml|txt|xsl)$">
11 Header set Cache-Control "max-age=7200, must-revalidate"
12 </FilesMatch>
13 14 # SetOutputFilter DEFLATE indica que se deben comprimir los contenidos
15 <FilesMatch "\.(js|css)$">
16 SetOutputFilter DEFLATE
17 Header set Expires "Thu, 25 Apr 2014 12:00:00 GMT"
18 </FilesMatch>
19 - Comprimir la salida utilizando GZIP. Añadiendo la siguiente configuración indicaremos que todos los ficheros css,js y html se compriman:Apache configuration |copy code |?
01 02 # El módugo mod_gzip deberá estar habilitado en el servidor
03 <IfModule mod_gzip.c>
04 mod_gzip_on Yes
05 mod_gzip_dechunk Yes
06 mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
07 mod_gzip_item_include handler ^cgi-script$
08 mod_gzip_item_include mime ^text/.*
09 mod_gzip_item_include mime ^application/x-javascript.*
10 mod_gzip_item_exclude mime ^image/.*
11 mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
12 </IfModule>
13 - Rerigir los buscadores a https (SSL):Apache configuration |copy code |?
1 2 RewriteEngine On
3 RewriteCond %{HTTPS} !on
4 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
5 - Reescritur de URLs. Por ejemplo para utilizar url amigables, al servidor le llegaría una petición con dicha url y esa debería entenderse como la direccion interna que tiene en el servidor. Por ejemplo:
También puede ser interesante redirigir una página sin ‘www’ a una que si lo contenga:Apache configuration |copy code |?1 2 # Dirección a la que se está accediendo -> http://www.midominio.com/detalle-producto-14.html
3 # Dirección a la que se necesita cambiar -> http://www.midominio.com/detalles.php?id=14
4 RewriteEngine on
5 RewriteRule ^detalle-producto-([0-9]+)\.html$ detalles.php?id=$1
6 Apache configuration |copy code |?1 2 # Dirección a la que se está accediendo -> midominio.com/
3 # Dirección a la que se necesita cambiar -> http://www.midominio.com/
4 RewriteEngine On
5 RewriteCond %{HTTP_HOST} ^midominio\.com$
6 RewriteRule (.*) http://www.midominio.com/$1 [R=301,L]
7 - Evitar el acceso al listad de ficheros de una carpeta añadiendo una de las siguientes líneasApache configuration |copy code |?
1 2 # Para bloquear el listado añadir una de estas dos líneas
3 Options -Indexes
4 IndexIgnore *
5 - Añadir nuevos MIME-TYPES para evitar problemas en la descarga de ficheros con mimeType desconocido:Apache configuration |copy code |?
1 2 AddType application/x-endnote-connection enz
3 AddType application/x-endnote-filter enf
4 AddType application/x-spss-savefile sav
5 - Denegar el acceso a ficheros estáticos si el origen no es por un gestor de contenidos interno como ‘wordpress’ o está vacío:Apache configuration |copy code |?
1 2 RewriteCond %{HTTP_REFERER} !^$
3 RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]
4 RewriteCond %{HTTP_REFERER} !^http://www.askapache.com.*$ [NC]
5 RewriteRule \.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$ - [F,NS,L]
6 - Limitar el tamaño máximo de los ficheros que se pueden subir al servidor:Apache configuration |copy code |?
1 2 php_value upload_max_filesize 20M
3 php_value post_max_size 20M
4 php_value max_execution_time 200
5 php_value max_input_time 200
6 - Bloquear la ejecución de scripts:Apache configuration |copy code |?
1 2 Options -ExecCGI
3 AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
4 - Cambiar la codificación y el lenguaje de las cabeceras:Apache configuration |copy code |?
1 2 AddDefaultCharset UTF-8
3 DefaultLanguage es-ES
4 - Configurar el TIMEZONE del servidor:Apache configuration |copy code |?
1 2 SetEnv TZ Europe/Madrid
3 - Forzar que aparezca la venta de “Guardar como” cuando se acceda a ciertos ficheros:Apache configuration |copy code |?
1 2 AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4
3 - Protección de un fichero individual. Si se quiere únicamente aplicar la configuración a un único fichero sin verse afectado el resto de contenidos del servidor, añadir estas líneas:Apache configuration |copy code |?
01 02 <Files miPagina.html>
03 order deny,allow
04 deny from all
05 AuthType Basic
06 AuthName "Usuario Auth"
07 AuthLDAP on
08 AuthLDAPServer ldap://listado.miDominio.com/
09 AuthLDAPBase "ou=Usuario, o=Developando company, c=au"
10 require valid-user
11 satisfy any
12 </Files>
13 - Configuración de cookies. Crear cookie utilizando alguna de las variables de entorno:
Crear cookie utilizando las cabeceras de la petición que se recibe en el servidor:Apache configuration |copy code |?1 2 Header set Set-Cookie "language=%{lang}e; path=/;" env=lang
3 Apache configuration |copy code |?1 2 RewriteEngine On
3 RewriteBase /
4 RewriteRule ^(.*)(de|es|fr|it|ja|ru|en)/$ - [co=lang:$2:.miDominio.com:7200:/]
5 - Envío de cabeceras:Apache configuration |copy code |?
1 2 Header set Content-Language "es-ES"
3 Header set Vary "Accept-Encoding"
4 - Bloquear el acceso comparando por User-Agent que se recibe en las cabeceras de la petición:Apache configuration |copy code |?
1 2 SetEnvIfNoCase ^User-Agent$ .*(craftbot|download|extract|stripper|sucker|ninja|clshttp|webspider|leacher|collector|grabber|webpictures) HTTP_SAFE_BADBOT
3 SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
4 Deny from env=HTTP_SAFE_BADBOT
5
Si conoces algún otro truco escribe un comentario y ayúdanos a mejorar este artículo.
Deja tu comentario