htaccess

El .htaccess es un archivo de configuración distribuido y es la forma en que Apache maneja los cambios de configuración por directorio.

WordPress usa este archivo para manipular cómo Apache sirve los archivos desde tu directorio raíz y tus subdirectorios. En particular, WP modifica este archivo para poder manejar enlaces permanentes bonitos.

Esta página se puede utilizar para restaurar un archivo .htaccess dañado (por ejemplo, un plugin que no funciona correctamente).

WP básico

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

Multisitio

WordPress 3.5 y mayor

Si activaste Multisite en WordPress 3.5 o posterior, usa uno de estos.

Ejemplo en una subcarpeta

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

Ejemplo en un subdominio

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

WordPress 3.4 y menor

Si instalaste originalmente WordPress con 3.4 o anterior y activaste Multisite entonces, necesitas usar uno de estos:

Ejemplo en una subcarpeta

WordPress 3.0 a 3.4.2

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress

Ejemplo en un subdominio

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]
# END WordPress

Ejemplos generales

Opciones

Las opciones precedidas por un + se agregan a las opciones actualmente vigentes, y las opciones precedidas por un - se eliminan de las opciones actualmente vigentes.

Los valores posibles para la directiva Opciones son cualquier combinación de:

None

Todas las opciones están desactivadas.

All

Todas las opciones excepto MultiViews. Ésta es la configuración predeterminada.

ExecCGI

Se permite la ejecución de scripts CGI usando mod_cgi.

FollowSymLinks

El servidor seguirá enlaces simbólicos en este directorio.

Includes

Se permiten las inclusiones del lado del servidor proporcionadas por mod_include.

IncludesNOEXEC

Se permiten inclusiones del lado del servidor, pero el #exec cmd y #exec cgi están deshabilitados.

Indexes

La URL se asigna a un directorio, y no DirectoryIndex, una lista formateada del directorio.

MultiViews

El contenido negociado “MultiViews” se permite mediante mod_negotiation.

SymLinksIfOwnerMatch

Solo sigue los enlaces simbólicos donde el objetivo sea propiedad del mismo ID de usuario que el enlace.

Esto deshabilitará todas las opciones y luego solo habilitará FollowSymLinks, que es necesario para mod_rewrite.

Options None
Options FollowSymLinks

DirectoryIndex

DirectoryIndex establece el archivo que servirá Apache si se solicita un directorio.

Se pueden proporcionar varias URL, en cuyo caso el servidor devolverá la primera que encuentre.

DirectoryIndex index.php index.html /index.php

DefaultLanguage

DefaultLanguage hará que todos los archivos que aún no tengan una etiqueta de idioma específica asociada lo usen.

DefaultLanguage en

Default Charset

Establece la codificación de caracteres predeterminada enviada en el encabezado HTTP. Ver: Configuración de la información del juego de caracteres en .htaccess

AddDefaultCharset UTF-8

Establecer juego de caracteres para archivos específicos

AddType 'text/html; charset=UTF-8' .html

Establecer para archivos específicos

AddCharset UTF-8 .html

ServerSignature

La directiva ServerSignature permite la configuración de una línea de pie de página al final de los documentos generados por el servidor. Opcionalmente, agrega una línea que contenga la versión del servidor y el nombre del host virtual a las páginas generadas por el servidor (documentos de error interno, listados de directorios FTP, salida mod_status y mod_info, etc., pero no documentos generados por CGI o documentos de error personalizados).

On

agrega una línea con el número de versión del servidor y ServerName del servidor virtual de servicio

Off

suprime la línea del pie de página

Email

crea una referencia “mailto:” al ServerAdmin del documento de referencia

SetEnv SERVER_ADMIN admin@site.com
ServerSignature Email

Forzar la descarga de archivos

Lo siguiente hará que las solicitudes de archivos que terminen en las extensiones especificadas no se muestren en el navegador, sino que forzará un cuadro de diálogo “Guardar como” para que el cliente pueda descargarlo.

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

Compresión HTTP

La directiva AddOutputFilter asigna la extensión de la extensión del nombre de archivo a los filtros que procesarán las respuestas del servidor antes de enviarlas al cliente. Esto se suma a los filtros definidos en otros lugares, incluidos SetOutputFilter y AddOutputFilterByType. Este mapeo se fusiona con cualquiera que ya esté en vigor, anulando cualquier mapeo que ya exista para la misma extensión.

Consulta también: https://developers.google.com/speed/docs/insights/EnableCompression

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Forzar compresión para ciertos archivos

SetOutputFilter DEFLATE

Enviar encabezados HTTP personalizados

La directiva Header te permite enviar encabezados HTTP para cada solicitud, o solo archivos específicos. Puedes ver los encabezados HTTP de un sitio utilizando Firebug, Chrome Dev Tools, Wireshark o una herramienta en línea.

Header set X-Pingback "http://www.askapache.com/xmlrpc.php"
Header set Content-Language "en-US"

Encabezados HTTP sin establecer

Esto desarmará los encabezados HTTP, usando always hará un esfuerzo adicional para eliminarlos.

Header unset Pragma
Header always unset WP-Super-Cache
Header always unset X-Pingback

Acceso protegido con contraseña

Esto es muy útil para proteger el archivo wp-login.php. Puede utilizar este generador htpasswd.

Autenticación básica

AuthType Basic
AuthName "Password Protected"
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Satisfy All

Autenticación implícita

AuthType Digest
AuthName "Password Protected"
AuthDigestDomain /wp-login.php https://www.askapache.com/wp-login.php
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Satisfy All

Requerir IP específica

Esta es una forma de permitir el acceso únicamente a determinadas direcciones IP.

ErrorDocument 401 default
ErrorDocument 403 default


Order deny,allow
Deny from all
Allow from 198.101.159.98 localhost

Protege los archivos confidenciales

Esto niega todo acceso web a tu archivo wp-config, error_logs, php.ini y htaccess/htpasswds.

Order deny,allow
Deny from all

Requerir SSL

Esto forzará SSL y requerirá el nombre de host exacto o, de lo contrario, redirigirá a la versión SSL. Útil en un archivo /wp-admin/.htaccess.

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.wordpress.com"
ErrorDocument 403 https://www.wordpress.com

Recursos externos

También puedes ver