El fichero .htaccess aunque no pertenece al paquete de instalación WordPress es muy necesario tanto para este gestor de contenidos como para otro tipo de web.
Ya que este tiene una multitud de funciones útiles como por ejemplo; denegar el acceso a una IP, comprimir los ficheros, control de cache, proteger un archivo, evitar el hotlinking de imagenes, deshabilitar la navegación de directorio, etc., que nos puede ayudar a mantener seguro nuestro sitio web.
Si este es el primer post que lees sobre este tema .htaccess
significa acceso a Hipertexto (Hypertext Access) y es un archivo de configuración del servidor Apache que te permite establecer múltiples directivas como mencione anteriormente.
Apache es un software en el que funciona la mayoría de los sitios web encargado de servir páginas web para plataformas Microsoft Windows, Unix, etc.
Índice de contenido
- ¿Donde localizo el archivo .htaccess?
- PARÁMETROS Y DIRECTIVAS .HTACCESS
-
SEGURIDAD
- Protege el archivo de configuración de WordPress wp-config.php
- Protege también el archivo wp-config-sample.php
- Protege carpeta wp-content/uploads de la ejecución de scripts
- Protege wp-Includes
- Proteger ficheros y directorios ocultos
- Protege el fichero .htaccess
- Evitar el listado de directorios
- Proteger fichero readme.html
- Proteger fichero debug.log
- Protección contra inyección SQL, QUERY STRINGS…
- Acceso a wp-login.php solo deteminadas IPs
- Proteger varios archivos vulnerables
- Protege tu web del Hotlinking
- Protege de los comentarios SPAM
- Proteger plugins de WordPress
- Bloquea todas las peticiones de user-agent a través de SetEnvIfNoCase
- Limitar el tamaño de subida de archivos
- Denegar el acceso a la web en una hora u horas específicas del día
- Bloquear peticiones WordPress xmlrpc.php
- VELOCIDAD Y COMPRESIÓN
-
REESCRIBIR Y REDIRECCIONAR DOMINIO
- Redirigir peticiones www (www.tusitio.com) a la dirección sin www (tusitio.com)
- Redireccionar siempre peticiones www (www.tusitio.com)
- Redirigir dominio a un nuevo dominio (transferir page rank a otro dominio)
- Redirecionar a un nuevo dominio temporalmente
- Redireccionar las visitas a URL de página web en mantenimiento
- Redireccionar de HTTP a HTTPS
-
OTRAS FUNCIONES UTILES
- Descarga directa
- Evitar la descarga directa
- Evitar que los motores de búsqueda indexen un archivo
- Permitir fuentes entre dominios
- Servir imágenes de WebP
- Corregir errores de ortografía en las URL
- Páginas de Error personalizadas
- Evitar la visualización de errores al visitante
- Registrar errores de PHP en un fichero log
- Compatibilidad UTF-8
- Conclusión
¿Donde localizo el archivo .htaccess?
El archivo .htaccess es un archivo «oculto» (el punto delante del nombre indica que se trata de archivo oculto).
Para poder visualizarlo debes: Acceder a tu cPanel. Hacer clic en el «Administrador de Archivos«.
Te abre la pestaña y te ubicas en el directorio principal o la carpeta /public_html. Haces clic en el botón «Configuración» que esta en la esquina superior derecha, te abre un diálogo y una de las opciones es «Mostrar archivos ocultos» que debes tildar y luego hacer clic en «Save» para guardar los cambios.
Ahora si podrás ver el archivo .htaccess
en el directorio, hacer clic en el para editarlo con el editor de texto del hosting o descargarlo y editarlo con tu editor de texto preferido, para luego subirlo nuevamente.
Realiza una copia del fichero .htaccess
antes de modificarlo por si tienes problemas más adelante y así puedes distinguir el que funcionaba bien, del que tiene un error a solucionar.
PARÁMETROS Y DIRECTIVAS .HTACCESS
De forma general se puede decir que las directivas en el .htaccess se componen por el tipo de directiva (Options, AccessFileName, AuthType, AddHandler, AllowOverride, CacheDefaultExpire, CacheDetailHeader, ExpiresActive, ExpiresByType, etc.), los parámetros de la directiva y por último el final de cada línea en que se pueden agregar modificaciones adicionales.
Simbologías utilizadas en el archivo .htaccess
# El carácter numeral puesto al inicio de una línea sirve para escribir un comentario que no tiene ningún efecto en la siguiente linea, el servidor Apache ignora esa línea.
[F] Forbidden: Fuerza un acceso denegado. 403 Forbidden.
[L] Last rule: Indica que es la última regla que debe aplicarse.
[N] Next: Indica continuación hasta que las directivas sean logradas.
[G] Gone: Indica al servidor que ya no existe.
[P] Proxy: Instruye al servidor para manejar los pedidos por mod_proxy.
[C] Chain: Encadena la regla actual con la regla anterior.
[R] Redirect: Indica redirección. Puede haber de varios tipos 301 (permanente), 302 (provisional), 307 (temporal).
[NC] No Case: No sensible a mayúsculas, es decir, que no debe distinguirse entre mayúsculas y minúsculas.
[PT] Pass Through: Pasa el URL a Apache para seguir procesando.
[OR] Or: La expresión debe interpretase como una alternativa junto a la siguiente.
[NE] No Escape: Analiza las salidas de caracteres sin escapar.
[NS] No Subrequest: Para saltar directivas de sub-pedidos internos.
[QSA] Append Query String: Agrega un query string al final de la expresión (URL).
[S=x] Skip: Salta las siguientes “x” reglas del archivo .htaccess.
[E=variable:value] Environmental Variable: Para añadir un valor a una variable.
[T=MIME-type] Mime Type: Declara mime-type al recurso.
[] Dentro de los corchetes se encierran carácteres que definen los resultados.
[]+ Se utiliza para hacer combinaciones.
[^] Excluye los carácteres que pongamos dentro del corchete. Ejemplo [^abcd] excluye las letras a, b, c y d.
[a-z] Letras desde la a hasta la z (en minúsculas).
[A-Z] Letras desde la A hasta la Z (en mayúsculas).
[a-zA-Z] Solo letras de (minúsculas a mayúsculas).
[a-z]{1,10} Solo palabras en minúsculas entre 1 y 10 caracteres.
[0-9] Solo un número.
0-9]{4} Solo números de 4 cifras.
(.*) Cualquier expresión, incluida la vacía.
a{n} Especifica el número exacto de caracteres.
a{n,} Especifica el número “o más” de caracteres.
a{n,m} Especifica un rango entre “n” y “m”. Ejemplo s{3,6} será 3 “eses”, 4 “eses”, 5 “eses” o 6 “eses” etc.
() Agrupa caracteres.
^ Marca el inicio de un argumento.
$ Marca el fin de un argumento.
? Establece como opcional el caracter que le precede.
! Es la negación (excepto). Ejemplo: “!string” resulta “no string”.
. El punto indica cualquier carácter arbitrario.
– Instrucción “not to”.
+ El símbolo de suma indica uno o más caracteres del caracter que le precede. Por ejemplo: (.+) indica cualquier cadena de uno o más caracteres.
| Es el o lógico, condición de alternancia. Ejemplo (x|y) es el caracter x o el y.
Escapa caracteres, es decir, toma el carácter que le sigue literalmente. Por ejemplo: “.” indica literalmente un punto, ya que sin la barra invertida indicaría cualquier carácter.
/* Indica cero o más “/”.
.* Indica cero o cualquier carácter, incluido que no exista carácter.
^$ Indica una cadena vacía.
^.*$ Pauta estándar que indica “todo”, toda la cadena.
[^/.] Define, un carácter que no sea “/” ni “.”.
[^/.]+ Define, ningún número de carácter que tenga “/” o “.”.
http:// Es literalmente el protocolo “http://”.
^dominio.* Define una cadena que comience con el termino “dominio” y le siga cualquier número de caracteres.
^dominio.com$ define exactamente el “dominio.com”.
-d Prueba si la cadena es un directorio existente.
-f Prueba si la cadena es un archivo existente.
-s Prueba si el archivo en la cadena no tiene valor cero.
En las líneas donde aparezca el texto “tudominio.com”, «elnuevodominio.com» sustituir por el dominio correcto del sitio web.
SEGURIDAD
Protege el archivo de configuración de WordPress wp-config.php
Si usas WordPress ya debes saber que este archivo es esencial en tu instalación ya que en el se encuentra el nombre de tu base de datos, la contraseña, etc. El siguiente código es para impedir el acceso a cualquier persona que intente llegar ahí.
# Proteger archivo wp-config <files wp-config.php> order allow,deny deny from all </files>
Protege también el archivo wp-config-sample.php
Este es otro archivo que deberías proteger ya que a pesar de que no lo utilices o lo hayas borrado o renombrado cuando instalaste WordPress, este siempre se crea o se reemplaza cuando hay una nueva actualización y puede ser utilizarlo por un atacante con el fin de editarlo y reemplazar tu wp-config
original.
# Protect wp-config-sample.php <files wp-config-sample.php> order allow,deny deny from all </files>
Protege carpeta wp-content/uploads de la ejecución de scripts
Dentro de la carpeta wp-content/uploads crea un nuevo fichero .htaccess
y añade el siguiente código.
# Protección contra ejecución de Scripts AddHandler cgi-script .php .phtml .php3 .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI
Protege wp-Includes
Este código bloquea los scripts usando mod_rewrite
en el archivo .htaccess
(con Apache) para que no puedan ser accedidos por cualquier usuario.
# Bloquear wp-includes <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule>
Nota: Esto código no funciona del todo bien en Multisitios WordPress ya que la regla RewriteRule ^wp-includes/[^/]+.php$ – [F,L] impediría a los archivos ms-files.php file de generar imágenes. Omitiendo esta línea permitirá al código de funcionar.
Proteger ficheros y directorios ocultos
# Proteger ficheros y directorios ocultos <IfModule mod_rewrite.c> RewriteCond %{SCRIPT_FILENAME} -d [OR] RewriteCond %{SCRIPT_FILENAME} -f RewriteRule "(^|/)." - [F] </IfModule>
Protege el fichero .htaccess
Una protección contra el mismo fichero, evita que otros pueden acceder al .htaccess.
# Protege htaccess <files .htaccess> order allow,deny deny from all </files>
Evitar el listado de directorios
Si tienes una carpeta en el servidor utilizada para almacenar archivos como los eBooks, o por ejemplo tienes instalado plugins importantes si la carpeta no tiene un archivo index, los visitantes pueden ver todos los archivos dentro de la carpeta sin problemas. En este caso puedes utilizar el siguiente código para evitar que esto suceda.
Options -Indexes
Proteger fichero readme.html
El siguiente código evita que se acceda a readme.html de WordPress ya que contiene el número de versión, muchos hacker buscan vulnerabilidades de sitios web que aun usan usan versión vieja de WordPress.
# Protege fichero readme <files readme.html> Deny from all </files>
Proteger fichero debug.log
WordPress tiene una opción para activar el registro de depuración en un archivo ubicado en wp-content/debug.log. Este archivo puede contener información sensible. Por lo que solamente tu deberías tener acceso a el iniciando sesión en el cPanel de su sito y no un tercero mediante un acceso externo.
# protect debug.log <Files debug.log> order allow,deny deny from all </files>
Protección contra inyección SQL, QUERY STRINGS…
# Protección de inyección SQL RewriteCond % {QUERY_STRING} ( <| % 3C). * Script. * (> | % 3E) [NC, OR] RewriteCond % {QUERY_STRING} GLOBALS (= | [| % [0-9A-Z] {0,2}) [O] RewriteCond % {QUERY_STRING} _REQUEST (= | [| % [0-9A-Z] {0,2}) RewriteRule ^ (. *) $ Index.php [F, L]
# PROTECT QUERY STRINGS <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} (eval() [NC,OR] RewriteCond %{QUERY_STRING} (127.0.0.1) [NC,OR] RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR] RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR] RewriteCond %{QUERY_STRING} (base64_encode)(.*)(() [NC,OR] RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|[|%) [NC,OR] RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR] RewriteCond %{QUERY_STRING} (|...|../|~|`|<|>||) [NC,OR] RewriteCond %{QUERY_STRING} (boot.ini|etc/passwd|self/environ) [NC,OR] RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?).php [NC,OR] RewriteCond %{QUERY_STRING} ('|")(.*)(drop|insert|md5|select|union) [NC] RewriteRule .* - [F] </IfModule>
# Protect REQUEST METHOD <IfModule mod_rewrite.c> RewriteCond %{REQUEST_METHOD} ^(connect|debug|move|put|trace|track) [NC] RewriteRule .* - [F] </IfModule>
# Protect REQUEST STRINGS <IfModule mod_alias.c> RedirectMatch 403 (?i)([a-z0-9]{2000,}) RedirectMatch 403 (?i)(https?|ftp|php):/ RedirectMatch 403 (?i)(base64_encode)(.*)(() RedirectMatch 403 (?i)(='|=%27|/'/?). RedirectMatch 403 (?i)/($(&)?|*|"|.|,|&|&?)/?$ RedirectMatch 403 (?i)({0}|(/(|...|+++|"") RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%||s|{|}|[|]||) RedirectMatch 403 (?i)/(=|
amp;|_mm|cgi-|etc/passwd|muieblack) RedirectMatch 403 (?i)(&pws=0|_vti_|(null)|{$itemURL}|echo(.*)kae|etc/passwd|eval(|self/environ) RedirectMatch 403 (?i).(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$ RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell).php </IfModule>
Acceso a wp-login.php solo deteminadas IPs
#Acceso a wp-login.php IPs permitidas <files wp-login.php> order deny,allow deny from all allow from xxx.xxx.xxx.xxx </files>
Donde xxx.xxx.xxx.xxx es tu IP si reemplazas los últimos tres dígitos, por ejemplo 0/30, esto especificará un rango de direcciones IP dentro de la misma red, lo que le ahorrará el problema de enumerar todas las direcciones IP permitidas por separado. Pero si las diferentes IP no pertenecen al mismo rango de la IP, solo agregue allow from en cada linea con la IP correspondiente.
Proteger varios archivos vulnerables
El siguiente código es un poco más compacto protege varios archivos a la vez sin necesidad de invocar el mismo comando.
#protege archivos vulnerables <FilesMatch "^.*(error_log|wp-config.php|php.ini|.[hH][tT][aApP].*)$"> Order deny,allow Deny from all </FilesMatch>
Protege tu web del Hotlinking
# Evitar hotlinking de imagenes RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?tudominio.com[NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC] RewriteRule .(jpg|jpeg|png|gif)$ - [NC,F,L]
Protege de los comentarios SPAM
Este código es valido solo sino usas una aplicación externa para la gestión de comentarios como Disqus o otro similar, ellos se encargan del SPAM.
# bloquear comentarios a peticiones no referenciadas (SPAM) RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post.php* RewriteCond %{HTTP_REFERER} !.*tudominio.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
Proteger plugins de WordPress
#asegurar los plugins <Files ~ ".(js|css)$"> order allow,deny allow from all </Files>
Bloquea todas las peticiones de user-agent a través de SetEnvIfNoCase
SetEnvIfNoCase es una directiva que permite definir una variable dependiendo de una condición y se puede utilizar para bloquear peticiones user-agent.
#bloquea todas las peticiones de user-agent SetEnvIfNoCase User-Agent "^magpie-crawler" bad_bot SetEnvIfNoCase User-Agent "^baiduspider" bad_bot SetEnvIfNoCase User-Agent "^baidu" bad_bot SetEnvIfNoCase User-Agent "^baidu.*" bad_bot SetEnvIfNoCase User-Agent "^Baiduspider/2.0" bad_bot SetEnvIfNoCase User-Agent "^Yandex.*" bad_bot SetEnvIfNoCase User-Agent "^YandexBot" bad_bot SetEnvIfNoCase User-Agent "^Zeus" bad_bot SetEnvIfNoCase User-Agent "^Ingresa aquí otro User-Agent a bloquear" bad_bot <Limit GET POST HEAD> Order Allow,Deny Allow from all Deny from env=bad_bot </Limit>
Limitar el tamaño de subida de archivos
#Protege de ciertos ataques DOS limitando el tamaño de archivos que se suben al servidor LimitRequestBody 10240000
Denegar el acceso a la web en una hora u horas específicas del día
No se el porqué querrías bloquear el acceso a tu web en ciertas horas del día, pero acá tienes este código útil.
# una hora RewriteCond %{TIME_HOUR} ^12$ RewriteRule ^.*$ - [F,L] # varias horas RewriteCond %{TIME_HOUR} ^(12|13|14|15)$ RewriteRule ^.*$ - [F,L]
Bloquear peticiones WordPress xmlrpc.php
El fichero xmlrpc.php
es uno de lo que más buscan los atacantes para dañar tu web. Editando tu .htaccess puedes deshabilitar el acceso al archivo xmlrpc.php
que es responsable de la funcionalidad XML-RPC en WordPress.
- Los hackers pueden explotar varias vulnerabilidades en la API de WordPress XML-RPC de varias maneras, tales como:
- Ataques de denegación de servicio (DoS)
- Escanear puertos en redes internas para obtener información de varios hosts.
- Hackear enrutadores internos.
Además del beneficio de protección de seguridad, deshabilitar esta característica también puede ayudar a reducir la carga en su servidor, particularmente si su sitio actualmente tiene mucho tráfico no deseado que golpea la API de XML-RPC en su instalación.
NOTA: Solo bloquear esta característica si no está utilizando actualmente la funcionalidad XML-RPC en su instalación de WordPress.
# Bloquear peticiones xmlrpc <Files xmlrpc.php> order deny,allow deny from all </Files>
VELOCIDAD Y COMPRESIÓN
Cachear css, imagenes, javascript, html, xml…
El siguiente código establece el tiempo de caducidad de los ficheros e indican al navegador si debe solicitar un archivo específico del servidor o simplemente extraerlo del caché. Si la web es estática es aconsejable establecer los encabezados de caducidad del contenido estático a algo muy lejano en el futuro.
<IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 1 month" # CSS ExpiresByType text/css "access plus 1 year" # Data interchange ExpiresByType application/json "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType text/xml "access plus 0 seconds" # Favicon (cannot be renamed!) ExpiresByType image/x-icon "access plus 1 week" # HTML components (HTCs) ExpiresByType text/x-component "access plus 1 month" # HTML ExpiresByType text/html "access plus 0 seconds" # JavaScript ExpiresByType application/javascript "access plus 1 year" # Manifest files ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" ExpiresByType text/cache-manifest "access plus 0 seconds" # Media ExpiresByType audio/ogg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType video/webm "access plus 1 month" # Web feeds ExpiresByType application/atom+xml "access plus 1 hour" ExpiresByType application/rss+xml "access plus 1 hour" # Web fonts ExpiresByType application/font-woff2 "access plus 1 month" ExpiresByType application/font-woff "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" </IfModule>
Comprimir archivos xml, css, javascript y de texto
El siguiente código comprime todos los archivos css, javascript, xml y de texto.
# Comprimir archivos CSS, JavaScript, XML y texto <ifmodule> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript </ifmodule>
Al eliminar el ETag header, inhabilitas las cachés y los navegadores para que no puedan validar archivos, por lo que se ven obligados a confiar en tu Cache-Control y en tu Expires header.
<IfModule mod_headers.c> Header unset ETag </IfModule> FileETag None
REESCRIBIR Y REDIRECCIONAR DOMINIO
Redirigir peticiones www (www.tusitio.com) a la dirección sin www (tusitio.com)
RewriteEngine on RewriteCond %{HTTP_HOST} ^www.tudominio.com [NC] RewriteRule ^(.*)$ http://tudominio.com/$1 [L,R=301]
Redireccionar siempre peticiones www (www.tusitio.com)
RewriteEngine on RewriteCond %{HTTP_HOST} ^tudominio.com [NC] RewriteRule ^(.*)$ http://www.tudominio.com/$1 [L,R=301,NC]
Redirigir dominio a un nuevo dominio (transferir page rank a otro dominio)
Esto se puede aplicar en casos por ejemplo que el nombre de tu dominio es demasiado largo y adquieres un nuevo dominio con un nombre más corto y deseas redirigir a los visitantes a la nueva URL.
Redirect 301 (.*)$ http://www.elnuevodominio.com/$1
Esa es una manera de redireccionamiento 301 y mantiene los enlaces intactos. Pasaran de www.dominioviejo.com/blog/link-redireccion a www.nuevodominio.com/blog/link-redireccion. Esto es extremadamente útil cuando solo esta “moviendo” un sitio a un nuevo nombre de dominio.
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^dominioviejo.com$ [OR] RewriteCond %{HTTP_HOST} ^www.dominioviejo.com$ RewriteRule (.*)$ http://elnuevodominio.com/$1 [R=301,L] </IfModule>
Redirecionar a un nuevo dominio temporalmente
# redireccionar provisionalmente RewriteRule ^(.*)$ http://www.elnuevodominio.com/$1 [R=302,L]
Redireccionar las visitas a URL de página web en mantenimiento
RewriteEngine on RewriteCond %{REQUEST_URI} !/prueba-mantenimineto.html$ RewriteCond %{REMOTE_ADDR} !^123.123.123.123 RewriteRule $ /maintenance.html [R=302,L]
Reemplaza el 123.123.123.123 con tu dirección IP REAL y “prueba-mantenimiento.html” con el nombre de la página que deseas que tus visitantes vean.
Redireccionar de HTTP a HTTPS
RewriteEngine on RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
OTRAS FUNCIONES UTILES
Descarga directa
En ocasiones, puedes obligar al navegador a descargar contenido en lugar de mostrarlo.
# Descarga Directa <Files *.md> ForceType application/octet-stream Header set Content-Disposition attachment </Files>
Evitar la descarga directa
Lo contrario a lo anterior, obliga al navegador a mostrar contenido en lugar de descargarlo.
# Evitar la Descarga Directa < FilesMatch ". (Tex | log | aux) $"> Header set Content-Type text / plain </ FilesMatch >
Evitar que los motores de búsqueda indexen un archivo
Si desea evitar que los motores de búsqueda indexen un archivo que tiene en su página por algun motivo en particular.
Ejemplo un archivo .pdf agregue la siguiente linea:
# Evitar indexar pdf <Files ~ ".pdf$"> Header set X-Robots-Tag "noindex, nofollow" </Files>
O si desea hacer esto para otro tipos de archivos
# Evitar que se indexen esta paginas o estos formatos <Files ~ ".(php|xml|json|txt|html)$"> Header set X-Robots-Tag "noindex, noarchive, nosnippet" </Files>
Permitir fuentes entre dominios
Los webfonts servidos por CDN podrían no funcionar en Firefox o IE debido a CORS. Este código resuelve el problema.
# Permitir fuentes < IfModule mod_headers.c> < FilesMatch ". (Eot | otf | ttc | ttf | woff | woff2) $"> Conjunto de encabezado Access-Control- Allow -Origin " * " </ FilesMatch > </ IfModule >
Servir imágenes de WebP
Si se admiten imágenes WebP y se encuentra una imagen con una extensión .webp y el mismo nombre en el mismo lugar que la imagen png/jpg que se va a publicar, se servirá la imagen WebP.
# Imagenes WebP RewriteEngine On RewriteCond % {HTTP_ACCEPT} image / webp RewriteCond % { RAÍZ_DOCUMENTO } /$1.webp -f RewriteRule (. +) . (Jpe? G | png) $ $ 1.webp [T = imagen / webp, E = aceptar: 1]
Corregir errores de ortografía en las URL
# Corregir errores de ortografía en las URL CheckSpelling On
Páginas de Error personalizadas
# Paginas de Error personalizadas ErrorDocument 401 /error/401.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php
Nota: Para otro tipo de error, se coloca el número de error y la dirección correspondiente para redireccionar al visitante.
Evitar la visualización de errores al visitante
# evitar que los errores se muestren al usuario php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off
Registrar errores de PHP en un fichero log
# registrar errores en carpeta log php_flag log_errors on php_value error_log /logs/php_error.log
Compatibilidad UTF-8
El contenido de su texto siempre debe estar codificado en UTF-8, ¿no? esta opción es para los que no utilizan el carácter estándar reconocido por el servidor, con esta medida evitamos mostrar el error 500.
# Utilice la codificación UTF-8 para cualquier texto servido / plain o text / html AddDefaultCharset utf-8 # Forzar UTF-8 para varios formatos de archivo AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
Conclusión
Ten presente que si insertas algún código en el .htaccess
que ya esta implementado mediante un plugins o cometes un error en alguna linea del fichero, causaras un error interno en el servidor lo que puede conllevar a que no muestre tu pagina web, para arreglar dicho error basta con revertir los cambios.
- Protege el archivo .htaccess de reescrituras ajenas, aplica permisos 644 ó 604.
- La directiva [L] impide que el servidor no procese más el archivo, una vez que se cumple esa regla, lo que es igual a menos CPU utilizado por el servidor.
- El tamaño del fichero es importante, mientras más pequeño sea el fichero .htaccess menor sera el tiempo que el servidor tardara de procesar una petición.
- Además los comentarios en el fichero son fundamentales, dado lo complicado que pueden ser ciertas lineas de código, es imprescindible comentar adecuadamente antes de escribir una nueva directiva para tener una idea, cuando revises el fichero luego y te preguntes el porqué esta cierto «código allí» a que corresponde.
- Para concluir no escatimes en comentarios y organiza adecuadamente donde colocaras las instrucciones de tu fichero, recuerda realizar una copia del .htaccess antes de modificarlo.
Hay miles de apuntes escritos sobre el fichero .htaccess y es casi imposible abarcarlos todos pero estos son los que considero imprescindibles para un blog.
Espero que con los anteriores ejemplos, puedas configurar tu propio .htaccess según tus necesidades.