Concepto htaccess
El archivo .htaccess de tu web será como la tabla de los mandamientos para el servidor Apache, que cumplirá estrictamente lo que se le indique en el archivo .htaccess.
No tiene porqué existir un solo archivo .htaccess, sino que puede existir un .htaccess para cada directorio si lo consideras necesario. El comportamiento de este archivo es jerárquico en el árbol de directorios de tu web, por lo que, si tienes un archivo .htaccess en el directorio raíz de la web, las instrucciones que indiques en ese archivo se aplicarán a toda la web. En cambio, si creas un archivo en alguna de las carpetas de tu web, las directrices de ese archivo solo se aplicarán al contenido de esa carpeta y subcarpetas, por lo que no afectará al resto de directorios de tu web.
De la misma forma, el archivo .htaccess se utiliza para configurar otros muchos aspectos de tu web; como las tareas de protección, mediante la restricción del acceso a determinadas carpetas de tu servidor o bloqueando el acceso a determinadas direcciones IP; redireccionar a pantallas de error personalizadas, como en el caso de los errores 404; evitar vulnerabilidades y accesos no permitidos, como el listado de los directorios que forman tu web o reducir el tiempo de carga de tu página.
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.
Nota: Para asegurar que los siguientes códigos no sean sobrescritos por WordPress, póngalo fuera de los tags
# BEGIN WordPress y # END WordPress en el archivo .htaccess.
Configuración basica .htaccess en worpress
# BEGIN WordPress
# The directives (lines) between `BEGIN WordPress` and `END WordPress` are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# php -- BEGIN cPanel-generated handler, do not edit
# Configure el paquete “alt-php73” como el lenguaje de programación predeterminado “PHP”.
<IfModule mime_module>
AddHandler application/x-httpd-alt-php73 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
RewriteEngine On:
El módulo mod_rewrite es un módulo del servidor web Apache.Este módulo mod_rewrite permite crear direcciones URL alternativas a las dinámicas generadas por la programación de nuestros sitio web (blog, foro, portal…), de tal modo que sean más legibles y fáciles de recordar.
Además de convertir las URLs de nuestro sitio web en URLs más amigables y fáciles de recordar se puede usar para otros usos.
– Se puede bloquear direcciones IP para impedir el acceso a nuestro sitio web.
– Crear una redirección de nuestro dominio a otro sitio.
– Evitar que desde otros sitios usen nuestras imágenes, lo que se denomina hotlinking.
El mod_rewrite de Apache está activado en todos los servidor web Apache para poder hacer que funcione deberemos incluir en nuestro archivo .htaccess de nuestro directorio public_html del alojamiento la siguiente línea de código:
RewriteEngine on
RewriteBase / :
Debe ser especificada al principio del archivo .htaccess , con RewriteBase define desde qué directorio se debe acceder a la RewriteRule. Si se especifica RewriteBase con / (como en el ejemplo arriba), la ruta de salida es el directorio al que se enlaza el dominio a redirigir.
RewriteBase y RewriteRule en el mismo directorio
Si desea que la RewriteRule creada entre en vigor en el mismo directorio en el que se definió la RewriteBase, no especifique ninguna otra ruta de directorio en su RewriteRule. Basta con especificar el fichero con el símbolo / delante.
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteBase y RewriteRule en diferentes directorios
Si una RewriteRule va a tener efecto en un directorio distinto al especificado por la RewriteBase, éste debe definirse con la especificación correspondiente de la ruta del directorio.
Ejemplo de RewriteRule, que debe funcionar en un directorio diferente al especificado en RewriteBase
La siguiente RewriteRule especifica que el archivo index.php debe cargarse automáticamente desde el directorio /prueba cada vez que se acceda a una página php inexistente.
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.php$ prueba/index.php
Compruebe si las funciones no estén desactivadas. Algunos scripts predefinidos y sistemas de gestión de contenido (CMS), como Joomla, desactivan las reglas de reescritura para evitar problemas durante la instalación. En un archivo .htaccess, se desactivan los comandos escribiendo una almohadilla (#) al principio de la línea que debe desactivarse.
Configurar correctamente las páginas de error (404) en el archivo .htaccess
Para que una página 404 se muestre, será suficiente con una simple entrada en el archivo.htaccess. Esto se complementa con:
ErrorDocumento 404 /mi-pagina-error.html
#Nota: mi-pagina-error.html puedes cambiarlo por otro nombre
Nota: Lo he probado con https://www.sistrix.com/ , no es necesario implementarlo en .htaccess, solo la página de error personalizado deve trasmitir correctamente un código de estado HTPP 404 , si usas PHP lo puedes hacer de la siguiente manera:
header('HTTP/1.1 404 Not Found', true, 404);
Prueba el codigo de estado HTPP que arroja una URL
Fuentes:
https://stackoverflow.com/questions/24711083/forcing-ssl-and-www-using-htaccess