htaccess de un vistazo

Cuando te dedicas a hacer páginas web en un hosting propio tarde o temprano tienes que plantearte tocar el archivo .htaccess. Y una y otra vez tienes que andar buscando por Internet lo que necesitas. A mi me pasa constantemente así que me voy a montar la chuleta aquí para cuando me haga falta. Y de paso, queda también para el resto del mundo.

Sustituye tuSITIO por el tuyo, cambiando el .com por la extensión que sea.

REWRITE Y REDIRECCIONES

- Para forzar que la URL siempre tenga www.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^tuSITIO\.com [NC]
RewriteRule ^(.*)$ http://www.tuSITIO.com/$1 [L,R=301,NC]


- Para forzar que la URL siempre tenga www. (sin citar el dominio)

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


- Para forzar que la URL no tenga www.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.tuSITIO\.com [NC]
RewriteRule ^(.*)$ http://tuSITIO.com/$1 [L,R=301]


- Para forzar HTTPS

RewriteEngine on RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


- Para forzar la barra inclinada final (/)

RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]


- Redirige a una página determinada (2 ejemplos)

Redirect 301 /antiguapagina.html http://www.tuSITIO.com/nuevapagina.html
Redirect 301 /antiguapagina2.html http://www.tuSITIO.com/carpeta/


- Redirige un sitio entero (mantiene los enlaces internos sin cambios)

Redirect 301 / http://newsite.com/



SEGURIDAD

- Denegar acceso a todos

Deny from All


- Denegar acceso a todos excepto a ti
Ojo, esto funciona usando tu IP, aquí mostrada como xxx.xxx.xxx.xxx. Si cambia tu IP tampoco tendrás acceso y tendrás que cambiar el htaccess.

Order deny, allow
Deny from All
Allow from xxx.xxx.xxx.xxx


- Permitir a todos excepto a spammers y trolls
Hay que añadir las IPs de aquellos a quienes deseas prohibir la entrada. Funciona relativamente ya que también pueden cambiar de IP pero puede ser útil.

Order deny, allow
Allow from All
Deny from xxx.xxx.xxx.xxx
Deny from xxx.xxx.xxx.xxy

- Denegar acceso a archivos ocultos y directorios

RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]

- Denegar acceso a backups y archivos con código fuente


<FilesMatch "(\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)|~)$">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>

- Deshabilitar navegación en directorios

Options All -Indexes

- Deshabilitar hotlinking a imágenes (que no puedan enlazar directamente a una imagen)

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tuSITIO.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

- Proteger con contraseña (password) un directorio

Primero tienes que crear un archivo .htpasswd escribiendo en él el nombre de usuario y la contraseña, así:

nombreusuario:contraseña

Puedes, si quieres, codificar la contraseña (elige base64)

Lo subes al directorio que quieres proteger y luego agrega allí un .htaccess con lo siguiente (indicando la ruta correcta al .htpasswd. En este ejemplo: /home/privado/.htpasswd)

AuthType Basic
AuthName "Area restringida"
AuthUserFile /home/privado/.htpasswd
Require valid-user


RENDIMIENTO

- Comprimir archivos de texto

<IfModule mod_deflate.c>
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/x-web-app-manifest+json \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/plain \
text/x-component \
text/xml
</IfModule>
</IfModule>

- Configurar Expires Headers
Le dice a los navegadores cuando deben descargar determinados archivos del servidor en vez de usar los que tenga almacenados en su propia caché por visitar el sitio anteriormente.

<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 year"
# Intercambio de datos
ExpiresByType application/json "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xml "access plus 0 seconds"
# Favicon
ExpiresByType image/x-icon "access plus 1 week"
# Componentes HTML
ExpiresByType text/x-component "access plus 1 month"
# HTML
ExpiresByType text/html "access plus 0 seconds"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
# Archivos Manifest
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"
# Feeds
ExpiresByType application/atom+xml "access plus 1 hour"
ExpiresByType application/rss+xml "access plus 1 hour"
# Fuentes
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>
- Deshabilitar eTags
Impide al navegador validar archivos forzándolo a utilizar los Expire Headers configurados en el punto anterior. Comprueba si sucede algún error y, en ese caso, no utilices esto.

<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None

OTRAS

- Configurar variables PHP
Esto puede hacerse también en el archivo php.ini pero si no se tiene acceso a él lo especificamos en el .htaccess. Esto son solo dos ejemplos:

php_value upload_max_filesize 50M
php_value max_execution_time 240

- Páginas de error personalizadas
En vez de usar las que tiene por defecto el servidor puedes hacer tus propias páginas de error y nombrarlas como quieras.

ErrorDocument 400 /errors/algofuemal.html
ErrorDocument 401 /errors/prohibidoelpaso.html
ErrorDocument 403 /errors/peligro.html
ErrorDocument 404 /errors/perdidos.html
ErrorDocument 500 /errors/servidormalito.html

- Permitir fuentes de otros dominios.
Las fuentes web de otros dominios o de un CDN pueden no funcionar en Firefox o IE. Esto podría solucionarlo.

<IfModule mod_headers.c>
<FilesMatch "\.(eot|otf|ttc|ttf|woff)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
- Codificación UTF-8 automática

# Usar codificación UTF-8 para cualquier text/plain o text/html
AddDefaultCharset utf-8

# Fuerza UTF-8 para determinados formatos de archivo
AddCharset utf-8 .atom .css .js .json .rss .vtt .xml

- Forzar la descarga
A lo mejor te interesa que determinados ficheros se descarguen en vez de mostrarse en el navegador. Simplemente cambia la extensión o extensiones.

<Files *.avi>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
Otra forma:
<FilesMatch "\.(jpg|zip|avi)$" >
ForceType application/octet-stream
Header add Content-Disposition "attachment" </FilesMatch>


También te puede interesar:

- .HTACCESS PERFECTO: configura y genera automáticamente el .htaccess que necesites.

- .HTACCESS URL REWRITE: generador automático de redirecciones para htaccess.




0 Response to "htaccess de un vistazo"

Posting Komentar