Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
htaccess_en_profundidad [2015/02/23 11:43]
10.12.12.54
htaccess_en_profundidad [2017/03/27 17:44] (actual)
Línea 2: Línea 2:
  
  
-====== 0 - Indice ====== 
  
  
-  * Introducción al .htaccess 
-  * Bloqueando y permitiendo acceso 
-  * Re-escritura y Redirección 
-  * Compresión y caché 
-  * Otras funcionalidades del .htaccess 
-  * Recomendaciones sobre el fichero .htaccess 
-  * Simbología del fichero .htaccess 
  
- + 
 ====== 1.- Introducción ====== ====== 1.- Introducción ======
  
Línea 34: Línea 27:
  
    
-2.- Bloqueando y Permitiendo Acceso+====== ​2.- Bloqueando y Permitiendo Acceso ​====== 
  
    
-Denegar el acceso a un directorio ​-carpeta- ​del servidor+Denegar el acceso a un directorio del servidor
  
 Crear un fichero .htaccess dentro de la carpeta con las instrucciones:​ Crear un fichero .htaccess dentro de la carpeta con las instrucciones:​
Línea 58: Línea 52:
 Bloquear el acceso a un archivo específico Bloquear el acceso a un archivo específico
  
-#bloquear un fichero concreto +  ​#bloquear un fichero concreto 
-<Files archivo_a_bloquear.html>​ +  <Files archivo_a_bloquear.html>​ 
-order allow,​deny +    order allow,​deny 
-deny from all+    deny from all
    
 Redireccionar visitantes a una dirección alternativa,​ menos a una IP específica Redireccionar visitantes a una dirección alternativa,​ menos a una IP específica
  
-#​Redireccionar a todos a otrositio.com excepto una IP concreta +  ​#​Redireccionar a todos a otrositio.com excepto una IP concreta 
-ErrorDocument 403 http://​www.otrositio.com +  ErrorDocument 403 http://​www.otrositio.com 
-order deny,​allow +  order deny,​allow 
-deny from all +  deny from all 
-allow from 100.101.102.103+  allow from 100.101.102.103
    
 Denegar un rango completo de IP Denegar un rango completo de IP
Línea 75: Línea 69:
 Esto quiere decir que elimina 256 direcciones en el primer caso, 65536 en el segundo caso, y más de 16 millones de direcciones IP en el tercer caso Esto quiere decir que elimina 256 direcciones en el primer caso, 65536 en el segundo caso, y más de 16 millones de direcciones IP en el tercer caso
  
-# Primer caso: deniega el acceso a 256 IPs, desde la 100.100.100.0 hasta la 100.100.100.255 +  ​# Primer caso: deniega el acceso a 256 IPs, desde la 100.100.100.0 hasta la 100.100.100.255 
-order allow,​deny +  order allow,​deny 
-deny from 100.100.100.+  deny from 100.100.100.
  
    
  
-# Segundo caso: deniega 65536 IP +  ​# Segundo caso: deniega 65536 IP 
-order allow,​deny +  order allow,​deny 
-deny from 100.100.+  deny from 100.100.
  
    
  
-# Tercer caso: deniega todas las IP que empiezan por 100, que son más de 16 millones +  ​# Tercer caso: deniega todas las IP que empiezan por 100, que son más de 16 millones 
-order allow,​deny +  order allow,​deny 
-deny from 100.+  deny from 100.
    
 Permitir un rango concreto de IP a la web Permitir un rango concreto de IP a la web
  
-# permitir acceso a rango 100.100.100.0 hasta 100.100.100.255 +  ​# permitir acceso a rango 100.100.100.0 hasta 100.100.100.255 
-order deny,​allow +  order deny,​allow 
-allow from 100.100.100.+  allow from 100.100.100.
    
 Denegar acceso de un dominio concreto Denegar acceso de un dominio concreto
  
-# bloquear acceso a un dominio +  ​# bloquear acceso a un dominio 
-order allow,​deny +  order allow,​deny 
-allow from all +  allow from all 
-deny from .*dominio\.com.*+  deny from .*dominio\.com.*
    
 Denegar acceso a visitantes que vengan de un dominio concreto Denegar acceso a visitantes que vengan de un dominio concreto
  
-# bloquear acceso visitas desde ejemplo1.com y ejemplo2.com +  ​# bloquear acceso visitas desde ejemplo1.com y ejemplo2.com 
-RewriteCond %{HTTP_REFERER} ejemplo1\.com [NC,OR] +  RewriteCond %{HTTP_REFERER} ejemplo1\.com [NC,OR] 
-RewriteCond %{HTTP_REFERER} ejemplo2\.com [NC,OR] +  RewriteCond %{HTTP_REFERER} ejemplo2\.com [NC,OR] 
-RewriteRule .* - [F]+  RewriteRule .* - [F]
    
 Denegar acceso a una hora específica Denegar acceso a una hora específica
  
-# bloquear acceso una hora +  ​# bloquear acceso una hora 
-RewriteCond %{TIME_HOUR} ^12$ +  RewriteCond %{TIME_HOUR} ^12$ 
-RewriteRule ^.*$ - [F,L]+  RewriteRule ^.*$ - [F,L]
    
 Denegar acceso a un directorio a varias horas concretas Denegar acceso a un directorio a varias horas concretas
  
-# bloquear acceso en varias horas +  ​# bloquear acceso en varias horas 
-RewriteCond %{TIME_HOUR} ^(12|13|14|15)$ +  RewriteCond %{TIME_HOUR} ^(12|13|14|15)$ 
-RewriteRule ^.*$ - [F,L]+  RewriteRule ^.*$ - [F,L]
    
 Denegar acceso a muchos proxies Denegar acceso a muchos proxies
  
-# bloqueo de Proxies +  ​# bloqueo de Proxies 
-RewriteCond %{HTTP:VIA} !^$ [OR] +  RewriteCond %{HTTP:VIA} !^$ [OR] 
-RewriteCond %{HTTP:​FORWARDED} !^$ [OR] +  RewriteCond %{HTTP:​FORWARDED} !^$ [OR] 
-RewriteCond %{HTTP:​USERAGENT_VIA} !^$ [OR] +  RewriteCond %{HTTP:​USERAGENT_VIA} !^$ [OR] 
-RewriteCond %{HTTP:​X_FORWARDED_FOR} !^$ [OR] +  RewriteCond %{HTTP:​X_FORWARDED_FOR} !^$ [OR] 
-RewriteCond %{HTTP:​PROXY_CONNECTION} !^$ [OR] +  RewriteCond %{HTTP:​PROXY_CONNECTION} !^$ [OR] 
-RewriteCond %{HTTP:​XPROXY_CONNECTION} !^$ [OR] +  RewriteCond %{HTTP:​XPROXY_CONNECTION} !^$ [OR] 
-RewriteCond %{HTTP:​HTTP_PC_REMOTE_ADDR} !^$ [OR] +  RewriteCond %{HTTP:​HTTP_PC_REMOTE_ADDR} !^$ [OR] 
-RewriteCond %{HTTP:​HTTP_CLIENT_IP} !^$ +  RewriteCond %{HTTP:​HTTP_CLIENT_IP} !^$ 
-RewriteRule ^(.*)$ - [F]+  RewriteRule ^(.*)$ - [F]
    
 Prevenir accesos al archivo .htaccess Prevenir accesos al archivo .htaccess
  
 # prevenir acceso .htaccess # prevenir acceso .htaccess
-<files .htaccess>​ +  ​<files .htaccess>​ 
-order allow,​deny +    order allow,​deny 
-deny from all +    deny from all 
-</​files>​+  </​files>​
    
 Prevenir el acceso a un archivo específico Prevenir el acceso a un archivo específico
  
-#prevenir acceso a un fichero concreto +  ​#prevenir acceso a un fichero concreto 
-<files nombre.jpg>​ +  <files nombre.jpg>​ 
-order allow,​deny +    order allow,​deny 
-deny from all +    deny from all 
-</​files>​+  </​files>​
    
 Prevenir el acceso a varios tipos de archivos Prevenir el acceso a varios tipos de archivos
  
-# prevenir acceso a tipos de ficheros concretos +  ​# prevenir acceso a tipos de ficheros concretos 
-<​FilesMatch "​\.(htaccess|htpasswd|ini|phps|log)$">​ +  <​FilesMatch "​\.(htaccess|htpasswd|ini|phps|log)$">​ 
-order allow,​deny +    order allow,​deny 
-deny from all +    deny from all 
-</​FilesMatch>​+  </​FilesMatch>​
    
 Evitar que se muestren determinados tipos de ficheros Evitar que se muestren determinados tipos de ficheros
  
-# evitar muestra de fichero MP4, WMV y AVI +  ​# evitar muestra de fichero MP4, WMV y AVI 
-IndexIgnore *.wmv *.mp4 *.avi+  IndexIgnore *.wmv *.mp4 *.avi
    
 Evitar el listado de directorios Evitar el listado de directorios
  
-# evitar listado de directorios +  ​# evitar listado de directorios 
-IndexIgnore *+  IndexIgnore *
    
 Evitar el hotlinking en el dominio Evitar el hotlinking en el dominio
Línea 174: Línea 168:
 El hotlinking es cuando descargan ficheros de tu servidor desde otra web para mostrarlos en ésta, '​robando'​ ancho de banda y servicios del tuyo. El hotlinking es cuando descargan ficheros de tu servidor desde otra web para mostrarlos en ésta, '​robando'​ ancho de banda y servicios del tuyo.
  
-# Evita el hotlinking a ficheros GIF y JPG del servidor +  ​# Evita el hotlinking a ficheros GIF y JPG del servidor 
-RewriteCond %{HTTP_REFERER} !^$ +  RewriteCond %{HTTP_REFERER} !^$ 
-RewriteCond %{HTTP_REFERER} !^http://​(www\.)?​midominio\.com/​.*$ [NC] +  RewriteCond %{HTTP_REFERER} !^http://​(www\.)?​midominio\.com/​.*$ [NC] 
-RewriteRule .*\.(gif|jpg)$ http://​www.midominio.com/​hotlinking.jpg [R,NC,L]+  RewriteRule .*\.(gif|jpg)$ http://​www.midominio.com/​hotlinking.jpg [R,NC,L]
  
    
Línea 187: Línea 181:
 Para evitar el hotlinking a ficheros MP3 y ficheros de vídeo AVI, WMV y MPG: Para evitar el hotlinking a ficheros MP3 y ficheros de vídeo AVI, WMV y MPG:
  
-# Evita el hotlinking a ficheros MP3, AVI, WMV y MPG de cualquier subdominio y dominio del servidor +  ​# Evita el hotlinking a ficheros MP3, AVI, WMV y MPG de cualquier subdominio y dominio del servidor 
-RewriteCond %{HTTP_REFERER} !^$ +  RewriteCond %{HTTP_REFERER} !^$ 
-RewriteCond %{HTTP_REFERER} !^http://​([-a-z0-9]+\.)?​midominio\.com [NC] +  RewriteCond %{HTTP_REFERER} !^http://​([-a-z0-9]+\.)?​midominio\.com [NC] 
-RewriteRule .*\.(mp3|avi|wmv|mpg|mpeg)$ http://​www.midominio.com/​images/​nohotlink.gif [R,NC,L]+  RewriteRule .*\.(mp3|avi|wmv|mpg|mpeg)$ http://​www.midominio.com/​images/​nohotlink.gif [R,NC,L]
  
    
Línea 202: Línea 196:
 Bloqueo de robot -bot- específico,​ a través de SetEnvIfNoCase Bloqueo de robot -bot- específico,​ a través de SetEnvIfNoCase
  
-# bloqueo del bot BotMalo +  ​# bloqueo del bot BotMalo 
-SetEnvIfNoCase User-Agent "​BotMalo/"​ spambot +  SetEnvIfNoCase User-Agent "​BotMalo/"​ spambot 
-deny from env=spambot+  deny from env=spambot
    
 Bloque de robot -bot- específico,​ a través de Rewrite Bloque de robot -bot- específico,​ a través de Rewrite
  
-# bloqueo de 3 bots conocidos (hay muchísimos más) +  ​# bloqueo de 3 bots conocidos (hay muchísimos más) 
-RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] +  RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] 
-RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] +  RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] 
-RewriteCond %{HTTP_USER_AGENT} ^Zeus +  RewriteCond %{HTTP_USER_AGENT} ^Zeus 
-RewriteRule .* - [F]+  RewriteRule .* - [F]
    
 Bloqueo de robot -bot- que accede siempre al mismo fichero Bloqueo de robot -bot- que accede siempre al mismo fichero
  
-# bloqueo del bot al acceder a un fichero PHP concreto +  ​# bloqueo del bot al acceder a un fichero PHP concreto 
-SetEnvIfNoCase Request_URI "/​firefoxz.php$"​ spambot +  SetEnvIfNoCase Request_URI "/​firefoxz.php$"​ spambot 
-deny from env=spambot+  deny from env=spambot
    
 Bloqueo de robot -bot- que siempre es referenciado desde un mismo sitio, a través de SetEnvIfNoCase Bloqueo de robot -bot- que siempre es referenciado desde un mismo sitio, a través de SetEnvIfNoCase
  
-# bloqueo cuando se viene referenciado de un sitio web concreto +  ​# bloqueo cuando se viene referenciado de un sitio web concreto 
-SetEnvIfNoCase Referer "​^http://​www.dominiospammers.com/"​ spambot +  SetEnvIfNoCase Referer "​^http://​www.dominiospammers.com/"​ spambot 
-deny from env=spambot+  deny from env=spambot
  
    
Línea 230: Línea 224:
 Nota: Las 3 anteriores sentencias pueden combinarse escribiendo las 3 líneas SetEnvIfNoCase,​ y luego solo un deny, de la siguiente forma: Nota: Las 3 anteriores sentencias pueden combinarse escribiendo las 3 líneas SetEnvIfNoCase,​ y luego solo un deny, de la siguiente forma:
  
-SetEnvIfNoCase User-Agent "​BotMalo/"​ spambot +  ​SetEnvIfNoCase User-Agent "​BotMalo/"​ spambot 
-SetEnvIfNoCase Request_URI "/​firefoxz.php$"​ spambot +  SetEnvIfNoCase Request_URI "/​firefoxz.php$"​ spambot 
-SetEnvIfNoCase Referer "​^http://​www.spammers.com/"​ spambot +  SetEnvIfNoCase Referer "​^http://​www.spammers.com/"​ spambot 
-deny from env=spambot+  deny from env=spambot
    
 Bloqueo de robot -bot- que siempre es referenciado desde un mismo sitio, a través de Rewrite Bloqueo de robot -bot- que siempre es referenciado desde un mismo sitio, a través de Rewrite
  
-# bloqueo cuando se viene referenciado de un sitio web concreto ejemplo1.com +  ​# bloqueo cuando se viene referenciado de un sitio web concreto ejemplo1.com 
-RewriteCond %{HTTP_REFERER} ^ejemplo1\.com$ [NC] +  RewriteCond %{HTTP_REFERER} ^ejemplo1\.com$ [NC] 
-RewriteRule .* - [F]+  RewriteRule .* - [F]
    
 Bloqueo de robot -bot- que siempre es referenciado desde dos sitios, a través de Rewrite Bloqueo de robot -bot- que siempre es referenciado desde dos sitios, a través de Rewrite
  
-# bloqueo cuando se viene referenciado desde ejemplo1.com o ejemplo2.com +  ​# bloqueo cuando se viene referenciado desde ejemplo1.com o ejemplo2.com 
-RewriteCond %{HTTP_REFERER} ^ejemplo1\.com$ [NC,OR] +  RewriteCond %{HTTP_REFERER} ^ejemplo1\.com$ [NC,OR] 
-RewriteCond %{HTTP_REFERER} ^ejemplo2\.com$ [NC] +  RewriteCond %{HTTP_REFERER} ^ejemplo2\.com$ [NC] 
-RewriteRule .* - [F]+  RewriteRule .* - [F]
    
 Evitar acceso mediante el navegador a una carpeta sin el archivo "​index"​ Evitar acceso mediante el navegador a una carpeta sin el archivo "​index"​
  
-# evitar acceso a carpeta sin index +  ​# evitar acceso a carpeta sin index 
-Options All -Indexes+  Options All -Indexes
  
    
Línea 257: Línea 251:
 Nota: lo contrario, es decir, permitir el acceso a carpetas sin index es: Nota: lo contrario, es decir, permitir el acceso a carpetas sin index es:
  
-# evitar acceso a carpeta sin index +  ​# evitar acceso a carpeta sin index 
-Options All +Indexes+  Options All +Indexes
  
    
Línea 265: Línea 259:
  
    
-3.- Re-escritura y redirección+====== ​3.- Re-escritura y redirección ​====== 
 + 
    
 Quitar siempre las www de la URL Quitar siempre las www de la URL
Línea 271: Línea 267:
 Es importante no repetir URLs -mostrando el mismo contenido con y sin www-, ya que penaliza el posicionamiento. Es importante no repetir URLs -mostrando el mismo contenido con y sin www-, ya que penaliza el posicionamiento.
  
-# quitar las www +  ​# quitar las www 
-RewriteCond %{http_host} ^www\.netandsoftware\.com [NC] +  RewriteCond %{http_host} ^www\.netandsoftware\.com [NC] 
-RewriteRule ^(.*)$ http://​netandsoftware.com/​$1 [R=301,L]+  RewriteRule ^(.*)$ http://​netandsoftware.com/​$1 [R=301,L]
    
 Mostrar siempre las www de la URL Mostrar siempre las www de la URL
  
-# mostrar siempre las www +  ​# mostrar siempre las www 
-RewriteCond %{HTTP_HOST} . +  RewriteCond %{HTTP_HOST} . 
-RewriteCond %{HTTP_HOST} !^www\.netandsoftware\.com$ +  RewriteCond %{HTTP_HOST} !^www\.netandsoftware\.com$ 
-RewriteRule (.*) http://​www.netandsoftware.com/​$1 [R=301,L]+  RewriteRule (.*) http://​www.netandsoftware.com/​$1 [R=301,L]
    
 Cambiar la página de carga por defecto Cambiar la página de carga por defecto
  
-#orden de los ficheros de carga por defecto +  ​#orden de los ficheros de carga por defecto 
-DirectoryIndex inicio.html index.htm index.html index.php+  DirectoryIndex inicio.html index.htm index.html index.php
  
    
Línea 295: Línea 291:
 Esto se hace para que sea más dificil detectar el tipo de ficheros que se usa Esto se hace para que sea más dificil detectar el tipo de ficheros que se usa
  
-# camuflar archivos PHP como NAS +  ​# camuflar archivos PHP como NAS 
-AddType application/​x-httpd-php .nas+  AddType application/​x-httpd-php .nas
    
 Redirigir el contenido en función del navegador usado Redirigir el contenido en función del navegador usado
  
-RewriteCond %{HTTP_USER_AGENT} ^Opera/* +  ​RewriteCond %{HTTP_USER_AGENT} ^Opera/* 
-RewriteRule ^index\.html$ index.opera.html [L] +  RewriteRule ^index\.html$ index.opera.html [L] 
-RewriteCond %{HTTP_USER_AGENT} ^Mozilla/​* +  RewriteCond %{HTTP_USER_AGENT} ^Mozilla/​* 
-RewriteRule ^index\.html$ index.mozilla.html [L] +  RewriteRule ^index\.html$ index.mozilla.html [L] 
-RewriteRule ^index\.html$ index.html [L]+  RewriteRule ^index\.html$ index.html [L]
  
    
Línea 312: Línea 308:
 Redireccionar una antigua página a la nueva Redireccionar una antigua página a la nueva
  
-# redireccionar permanentemente +  ​# redireccionar permanentemente 
-RewriteRule ^(.*)$ http://​www.minuevodominio.com/​$1 [R=301,L]+  RewriteRule ^(.*)$ http://​www.minuevodominio.com/​$1 [R=301,L]
    
 Redireccionar una antigua página a la nueva, a través de ReDirect Redireccionar una antigua página a la nueva, a través de ReDirect
  
-# redireccionar permanentemente +  ​# redireccionar permanentemente 
-redirect 301 / http://​www.dominio.com/​+  redirect 301 / http://​www.dominio.com/​
    
 Redireccionar una web a otro sitio provisionalmente (redirección 302) Redireccionar una web a otro sitio provisionalmente (redirección 302)
  
-# redireccionar provisionalmente +  ​# redireccionar provisionalmente 
-RewriteRule ^(.*)$ http://​www.minuevodominio.com/​$1 [R=302,L]+  RewriteRule ^(.*)$ http://​www.minuevodominio.com/​$1 [R=302,L]
    
 Redireccionar de un archivo a otro Redireccionar de un archivo a otro
  
-# redireccionar un antiguo fichero a otra nueva dirección +  ​# redireccionar un antiguo fichero a otra nueva dirección 
-Redirect /​antiguo.html http://​dominio.com/​nuevo.html+  Redirect /​antiguo.html http://​dominio.com/​nuevo.html
    
 Redireccionar una IP concreta a una página concreta Redireccionar una IP concreta a una página concreta
Línea 335: Línea 331:
  
 # redireccionar una IP a una página concreta de nuestra web # redireccionar una IP a una página concreta de nuestra web
-RewriteCond %{REMOTE_ADDR} 100.101.102.103 +  ​RewriteCond %{REMOTE_ADDR} 100.101.102.103 
-RewriteRule .* pagina-concreta.html [R]+  RewriteRule .* pagina-concreta.html [R]
    
 Redireccionar toda una web a un directorio del mismo dominio Redireccionar toda una web a un directorio del mismo dominio
  
-# traslada todas las URL antiguas a la nueva carpeta en el mismo dominio +  ​# traslada todas las URL antiguas a la nueva carpeta en el mismo dominio 
-RewriteCond %{HTTP_HOST} ^midominio\.com$ [OR] +  RewriteCond %{HTTP_HOST} ^midominio\.com$ [OR] 
-RewriteCond %{HTTP_HOST} ^www\.midominio\.com$ +  RewriteCond %{HTTP_HOST} ^www\.midominio\.com$ 
-RewriteCond %{REQUEST_URI} !^/​webencarpeta/​ +  RewriteCond %{REQUEST_URI} !^/​webencarpeta/​ 
-RewriteRule (.*) /​webencarpeta/​$1 [L]+  RewriteRule (.*) /​webencarpeta/​$1 [L]
    
 Quitar una palabra de una URL Quitar una palabra de una URL
Línea 350: Línea 346:
 En el siguiente ejemplo, de http://​www.midominio.com/​quitar/​prueba.html a http://​www.midominio.com/​prueba.html En el siguiente ejemplo, de http://​www.midominio.com/​quitar/​prueba.html a http://​www.midominio.com/​prueba.html
  
-# quitar una cadena de una URL +  ​# quitar una cadena de una URL 
-RewriteRule ^quitar/​(.+)$ http://​www.midominio.com/​$1 [R=301,L]+  RewriteRule ^quitar/​(.+)$ http://​www.midominio.com/​$1 [R=301,L]
    
 URL amigable (uso de fin de interrogación en RewriteRule) URL amigable (uso de fin de interrogación en RewriteRule)
Línea 357: Línea 353:
 Cambia una URL como http://​www.midominio.com/​articulos-blog?​catid=27 a http://​www.midominio.com/​articulos-blog de forma permanente. Cambia una URL como http://​www.midominio.com/​articulos-blog?​catid=27 a http://​www.midominio.com/​articulos-blog de forma permanente.
  
-# Uso de ? +  ​# Uso de ? 
-RewriteCond %{REQUEST_URI} ^/​articulos-blog$ [NC] +  RewriteCond %{REQUEST_URI} ^/​articulos-blog$ [NC] 
-RewriteCond %{QUERY_STRING} ^catid=(.*)$ [NC] +  RewriteCond %{QUERY_STRING} ^catid=(.*)$ [NC] 
-RewriteRule ^(.*)$ /​articulos-blog?​ [R=301,L]+  RewriteRule ^(.*)$ /​articulos-blog?​ [R=301,L]
    
 URL amigable (uso del tanto por ciento en RewriteRule) URL amigable (uso del tanto por ciento en RewriteRule)
 Cambia una URL como http://​www.dominio.com/​noticias?​id=127 a http://​www.dominio.com/​noticias/​127 de forma provisional. Cambia una URL como http://​www.dominio.com/​noticias?​id=127 a http://​www.dominio.com/​noticias/​127 de forma provisional.
  
-# Uso del % +  ​# Uso del % 
-RewriteCond %{REQUEST_URI} ^/noticias$ [NC] +  RewriteCond %{REQUEST_URI} ^/noticias$ [NC] 
-RewriteCond %{QUERY_STRING} ^id=(.*)$ [NC] +  RewriteCond %{QUERY_STRING} ^id=(.*)$ [NC] 
-RewriteRule ^(.*)$ /​noticias/​%1?​ [R=302,L]+  RewriteRule ^(.*)$ /​noticias/​%1?​ [R=302,L]
    
 Mejorando el posicionamiento SEO con RewriteRule Mejorando el posicionamiento SEO con RewriteRule
 Cambia una URL con la cadena "​ps"​ por una URL con la cadena "​posicionamiento-seo"​ que determina mejor el contenido de las URLs. Cambia una URL con la cadena "​ps"​ por una URL con la cadena "​posicionamiento-seo"​ que determina mejor el contenido de las URLs.
  
-# mejorando el posicionamiento SEO sustituyendo caracteres sin sentido por otros que determinan el contenido +  ​# mejorando el posicionamiento SEO sustituyendo caracteres sin sentido por otros que determinan el contenido 
-RewriteRule ^(.*)/​ps/​(.*)$ $1/​posicionamiento-seo/​$2 [L,R=301]+  RewriteRule ^(.*)/​ps/​(.*)$ $1/​posicionamiento-seo/​$2 [L,R=301]
    
 Transformación de una URL con agrupamiento de caracteres mayúsculas y minúsculas Transformación de una URL con agrupamiento de caracteres mayúsculas y minúsculas
Línea 380: Línea 376:
 Cambia la URL de este tipo http://​www.midominio.com/​pais/​Espana.php a http://​www.midominio.com/​codigo/​pais.php?​nombre=Espana Cambia la URL de este tipo http://​www.midominio.com/​pais/​Espana.php a http://​www.midominio.com/​codigo/​pais.php?​nombre=Espana
  
-# detectar palabras en mayúsculas o minúsculas o combinacion de ambas +  ​# detectar palabras en mayúsculas o minúsculas o combinacion de ambas 
-RewriteRule ^pais/​([a-zA-Z_-]+).php$ codigo/​pais.php?​nombre=$1 [L]+  RewriteRule ^pais/​([a-zA-Z_-]+).php$ codigo/​pais.php?​nombre=$1 [L]
    
 Paso de parámetros en la URL y doble parámetro Paso de parámetros en la URL y doble parámetro
Línea 387: Línea 383:
 Cambia una URL como http://​www.midominio.com/​fecha/​2013/​12.html a http://​www.midominio.com/​fecha.php?​mes=12&​anio=2013 de forma permanente Cambia una URL como http://​www.midominio.com/​fecha/​2013/​12.html a http://​www.midominio.com/​fecha.php?​mes=12&​anio=2013 de forma permanente
  
-# Doble parámetro +  ​# Doble parámetro 
-RewriteRule ^fecha/​(.+)/​(.+)\.html$ fecha.php?​mes=$2&​anio=$1 [R=301,L]+  RewriteRule ^fecha/​(.+)/​(.+)\.html$ fecha.php?​mes=$2&​anio=$1 [R=301,L]
  
    
Línea 395: Línea 391:
  
    
-4.- Compresión y caché+====== ​4.- Compresión y caché ​====== 
    
 Comprimir ficheros de texto, HTML, JavaScript, CSS y XML Comprimir ficheros de texto, HTML, JavaScript, CSS y XML
  
-# comprimir focheros texto, html, javascript, css, xml +  ​# comprimir focheros texto, html, javascript, css, xml 
-AddOutputFilterByType DEFLATE text/​plain +  AddOutputFilterByType DEFLATE text/​plain 
-AddOutputFilterByType DEFLATE text/html +  AddOutputFilterByType DEFLATE text/html 
-AddOutputFilterByType DEFLATE text/xml +  AddOutputFilterByType DEFLATE text/xml 
-AddOutputFilterByType DEFLATE text/css +  AddOutputFilterByType DEFLATE text/css 
-AddOutputFilterByType DEFLATE application/​xml +  AddOutputFilterByType DEFLATE application/​xml 
-AddOutputFilterByType DEFLATE application/​xhtml+xml +  AddOutputFilterByType DEFLATE application/​xhtml+xml 
-AddOutputFilterByType DEFLATE application/​rss+xml +  AddOutputFilterByType DEFLATE application/​rss+xml 
-AddOutputFilterByType DEFLATE application/​javascript +  AddOutputFilterByType DEFLATE application/​javascript 
-AddOutputFilterByType DEFLATE application/​x-javascript+  AddOutputFilterByType DEFLATE application/​x-javascript
  
    
Línea 417: Línea 414:
 Cachear ficheros de imágenes a una semana Cachear ficheros de imágenes a una semana
  
-#Cache del navegador, imagenes cacheadas a una semana: 604800 segundos +  ​#Cache del navegador, imagenes cacheadas a una semana: 604800 segundos 
-<​FilesMatch "​\.(ico|jpg|jpeg|png|gif)$">​ +  <​FilesMatch "​\.(ico|jpg|jpeg|png|gif)$">​ 
-Header set Cache-Control "​max-age=604800,​ public"​ +    Header set Cache-Control "​max-age=604800,​ public"​ 
-</​FilesMatch>​+  </​FilesMatch>​
    
 Cachear ficheros JPG a un mes Cachear ficheros JPG a un mes
  
-#Cache del navegador, imágenes cacheadas a un mes: 2592000 segundos +  ​#Cache del navegador, imágenes cacheadas a un mes: 2592000 segundos 
-<​FilesMatch "​\.(jpg|jpeg)$">​ +  <​FilesMatch "​\.(jpg|jpeg)$">​ 
-Header set Cache-Control "​max-age=2592000,​ public"​ +    Header set Cache-Control "​max-age=2592000,​ public"​ 
-</​FilesMatch>​+  </​FilesMatch>​
    
 Cachear con ExpiresByType y el intervalo legible Cachear con ExpiresByType y el intervalo legible
  
-#caché que expira las imágenes JPG en 6 meses, los CSS en 2 meses, y los JavaScripts en 2 semanas +  ​#caché que expira las imágenes JPG en 6 meses, los CSS en 2 meses, y los JavaScripts en 2 semanas 
-ExpiresActive on +  ExpiresActive on 
-ExpiresByType image/jpg "​access plus 6 months"​ +  ExpiresByType image/jpg "​access plus 6 months"​ 
-ExpiresByType text/css "​access plus 2 months"​ +  ExpiresByType text/css "​access plus 2 months"​ 
-ExpiresByType text/​javascript "​access plus 2 weeks"+  ExpiresByType text/​javascript "​access plus 2 weeks"
    
 Cachear ficheros a un año con ExpiresDefault y el intervalo en segundos Cachear ficheros a un año con ExpiresDefault y el intervalo en segundos
  
-ExpiresActive On +  ​ExpiresActive On 
-ExpiresDefault A0 +  ExpiresDefault A0 
-#  caché expira en un año (A9030400) para los ficheros FLV, ICO, AVI, MOV, PPT, DOC, MP3, WMV y WAV +  #  caché expira en un año (A9030400) para los ficheros FLV, ICO, AVI, MOV, PPT, DOC, MP3, WMV y WAV 
-<​FilesMatch "​\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">​ +  <​FilesMatch "​\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">​ 
-ExpiresDefault A9030400 +    ExpiresDefault A9030400 
-</​FilesMatch>​+  </​FilesMatch>​
  
    
Línea 451: Línea 448:
  
    
-5.- Otros funcionalidades en el .htaccess+====== ​5.- Otros funcionalidades en el .htaccess ​====== 
    
 Asignar permisos CHMOD automáticamente al fichero .htpasswd Asignar permisos CHMOD automáticamente al fichero .htpasswd
  
-# permiso automático del fichero que protege el directorio .htpasswd +  ​# permiso automático del fichero que protege el directorio .htpasswd 
-chmod .htpasswd files 640+  chmod .htpasswd files 640
    
 Asignar permisos CHMOD automáticamente al fichero .htaccess Asignar permisos CHMOD automáticamente al fichero .htaccess
  
-# permiso automático del fichero .htaccess +  ​# permiso automático del fichero .htaccess 
-chmod .htaccess files 644+  chmod .htaccess files 644
    
 Asignar permisos CHMOD automáticamente a ficheros PHP Asignar permisos CHMOD automáticamente a ficheros PHP
  
-# permisos automáticos de archivos PHP +  ​# permisos automáticos de archivos PHP 
-chmod php files 600+  chmod php files 600
    
 Limitar la subida de ficheros más grandes que una cantidad Limitar la subida de ficheros más grandes que una cantidad
Línea 472: Línea 470:
 Protege de ciertos ataques DOS, limitando el tamaño de archivos que se suben al servidor. Protege de ciertos ataques DOS, limitando el tamaño de archivos que se suben al servidor.
  
-# limitar la subida a 10 MB +  ​# limitar la subida a 10 MB 
-LimitRequestBody 10000000+  LimitRequestBody 10000000
    
 Permitir al usuario descargar archivos multimedia Permitir al usuario descargar archivos multimedia
Línea 479: Línea 477:
 Generalmente sólo se permiten abrir Generalmente sólo se permiten abrir
  
-# permitir descarga de ficheros multimedia AVI, MPG, WMV y MP3 +  ​# permitir descarga de ficheros multimedia AVI, MPG, WMV y MP3 
-AddType application/​octet-stream .avi +  AddType application/​octet-stream .avi 
-AddType application/​octet-stream .mpg +  AddType application/​octet-stream .mpg 
-AddType application/​octet-stream .wmv +  AddType application/​octet-stream .wmv 
-AddType application/​octet-stream .mp3+  AddType application/​octet-stream .mp3
    
 Personalizar errores 404 Personalizar errores 404
  
-ErrorDocument 404 /​errores/​404.html+  ​ErrorDocument 404 /​errores/​404.html
  
    
Línea 495: Línea 493:
 Corregir pequeños errores de ortografía en las URL Corregir pequeños errores de ortografía en las URL
  
-CheckSpelling On+  ​CheckSpelling On
    
 Especificar el e-mail por defecto del administrador del servidor Especificar el e-mail por defecto del administrador del servidor
  
-# e-mail del administrador del servidor +  ​# e-mail del administrador del servidor 
-SetEnv SERVER_ADMIN webmaster@midominio.com+  SetEnv SERVER_ADMIN webmaster@midominio.com
    
 Especificar el lenguaje por defecto del servidor Especificar el lenguaje por defecto del servidor
  
-# lenguaje por defecto del servidor +  ​# lenguaje por defecto del servidor 
-DefaultLanguage en-US+  DefaultLanguage en-US
    
 Forzar el uso del protocolo seguro SSL Forzar el uso del protocolo seguro SSL
  
-# fuerza el uso de SSL en la web +  ​# fuerza el uso de SSL en la web 
-SSLOptions + StrictRequire +  SSLOptions + StrictRequire 
-SSLRequireSSL+  SSLRequireSSL
    
 Redireccionar usuarios con protocolo seguro HTTPS a una carpeta en particular Redireccionar usuarios con protocolo seguro HTTPS a una carpeta en particular
 Esto se puede necesitar cuando una web tiene una tienda online en una carpeta específica Esto se puede necesitar cuando una web tiene una tienda online en una carpeta específica
  
-RewriteCond %{SERVER_PORT} 80 +  ​RewriteCond %{SERVER_PORT} 80 
-RewriteCond %{REQUEST_URI} carpeta +  RewriteCond %{REQUEST_URI} carpeta 
-RewriteRule ^(.*)$ https://​www.midominio.com/​carpeta/​$1 [R,L]+  RewriteRule ^(.*)$ https://​www.midominio.com/​carpeta/​$1 [R,L]
    
 Evitar la visualización de errores al visitante Evitar la visualización de errores al visitante
  
-# evitar que los errores se muestren al usuario +  ​# evitar que los errores se muestren al usuario 
-php_flag display_startup_errors off +  php_flag display_startup_errors off 
-php_flag display_errors off +  php_flag display_errors off 
-php_flag html_errors off+  php_flag html_errors off
    
 Registrar errores de PHP en un fichero log Registrar errores de PHP en un fichero log
  
-# registrar errores en log +  ​# registrar errores en log 
-php_flag log_errors on +  php_flag log_errors on 
-php_value error_log /​logs/​php_error.log+  php_value error_log /​logs/​php_error.log
    
 Limitar el número de visitas al mismo tiempo a 400 Limitar el número de visitas al mismo tiempo a 400
  
-# limitar el número de visitas a 400 +  ​# limitar el número de visitas a 400 
-MaxClients 400+  MaxClients 400
    
 Denegar la ejecución de scripts CGI Denegar la ejecución de scripts CGI
  
-# bloquear CGIs +  ​# bloquear CGIs 
-Options -ExecCGI +  Options -ExecCGI 
-AddHandler cgi-script .php .pl .py .jsp .asp .sh .cgi+  AddHandler cgi-script .php .pl .py .jsp .asp .sh .cgi
    
 Declarar tipos MIME Declarar tipos MIME
  
-# agregar tipos mime +  ​# agregar tipos mime 
-AddType application/​x-shockwave-flash .swf +  AddType application/​x-shockwave-flash .swf 
-AddType video/x-flv .flv +  AddType video/x-flv .flv 
-AddType image/​x-icon .ico+  AddType image/​x-icon .ico
    
 Definiendo el juego de caracteres Definiendo el juego de caracteres
Línea 555: Línea 553:
 Pasando el juego de caracteres se evita el mostrar un error 500 por este motivo Pasando el juego de caracteres se evita el mostrar un error 500 por este motivo
  
-AddDefaultCharset utf-8+  ​AddDefaultCharset utf-8
    
 Desactivar los Entities Tags Desactivar los Entities Tags
  
-FileETag none+  ​FileETag none
  
    
Línea 566: Línea 564:
  
    
-6.- Recomendaciones sobre el fichero .htaccess+====== ​6.- Recomendaciones sobre el fichero .htaccess ​======
  
-    ​El tamaño es importante: cuanto más pequeño sea el fichero .htaccess menos tiempo tardará el servidor en procesarlo cada vez que se realiza una petición a tu servidor. Esto implica una pérdida de rendimiento en la carga de las páginas de tu sitio web si este fichero se hace demasiado grande. + 
-    La directiva [L] es realmente interesante y hace que el servidor no procese más el archivo una vez que se cumple esa regla. Por lo que incorpora siempre que puedas esta directiva en los RewriteRule. +El tamaño es importante: cuanto más pequeño sea el fichero .htaccess menos tiempo tardará el servidor en procesarlo cada vez que se realiza una petición a tu servidor. Esto implica una pérdida de rendimiento en la carga de las páginas de tu sitio web si este fichero se hace demasiado grande. 
-    La organización es fundamental:​ dado lo complicada que pueden ser ciertas líneas en el código de .htaccess, es imprescindible comentar adecuadamente tu fichero para que la modificación sea rápida y sencilla. No escatimes en comentarios,​ y organiza adecuadamente las instrucciones de tu .htaccess. +    ​ 
-    Protege adecuadamente este archivo de reescrituras ajenas, puede llegar a ser muy peligroso. +La directiva [L] es realmente interesante y hace que el servidor no procese más el archivo una vez que se cumple esa regla. Por lo que incorpora siempre que puedas esta directiva en los RewriteRule. 
-    La denegación de permisos debe estar lo primero, antes de ejecutar RewriteCond y RewriteRule.+La organización es fundamental:​ dado lo complicada que pueden ser ciertas líneas en el código de .htaccess, es imprescindible comentar adecuadamente tu fichero para que la modificación sea rápida y sencilla. No escatimes en comentarios,​ y organiza adecuadamente las instrucciones de tu .htaccess. 
 +Protege adecuadamente este archivo de reescrituras ajenas, puede llegar a ser muy peligroso. 
 + 
 +La denegación de permisos debe estar lo primero, antes de ejecutar RewriteCond y RewriteRule.
  
    
  
    
-7.- Simbología del fichero .htaccess+====== ​7.- Simbología del fichero .htaccess ​====== 
  
 De forma breve, los códigos y símbolos en el archivo .htaccess son: De forma breve, los códigos y símbolos en el archivo .htaccess son:
Línea 601: Línea 603:
 [PT] Pass Through: pasa el URL a Apache para seguir procesando. [PT] Pass Through: pasa el URL a Apache para seguir procesando.
  
-[OR] Or: indica que la expresión debe interpretase como una alternativa junto a la siguiente: ​ó lógico. Si se omite, se sobreentiende que es una y lógica, por defecto.+[OR] Or: indica que la expresión debe interpretase como una alternativa junto a la siguiente: ​lógico. Si se omite, se sobreentiende que es una y lógica, por defecto.
  
 [NE] No Escape: analiza las salidas de caracteres sin escapar. [NE] No Escape: analiza las salidas de caracteres sin escapar.
Línea 657: Línea 659:
 + indica uno o más caracteres del caracter que le precede. Por ejemplo: (.+) indica cualquier cadena de uno o más caracteres. + indica uno o más caracteres del caracter que le precede. Por ejemplo: (.+) indica cualquier cadena de uno o más caracteres.
  
-| es el ó lógico, condición de alternancia. Ejemplo (a|b) es el caracter a o el b.+''​|'' ​es el ó lógico, condición de alternancia. Ejemplo ​''​(a|b)'' ​es el caracter a o el b.
  
 \ escapa caracteres, es decir, toma el caracter que le sigue literalmente. Por ejemplo: “\.” indica literalmente un punto, ya que sin la barra invertida indicaría cualquier caracter. \ escapa caracteres, es decir, toma el caracter que le sigue literalmente. Por ejemplo: “\.” indica literalmente un punto, ya que sin la barra invertida indicaría cualquier caracter.
Línea 687: Línea 689:
    
  
-Y espero que con estos ejemplos, tengan resueltas muchas de las opciones posibles para configurar su propio .htaccess según sus necesidades.+