El archivo htaccess le permite anular ciertas decisiones que el servidor realiza en segundo plano. Lo que esto significa para los SEO es que podemos manipular la información que el servidor envía de vuelta al cliente de una manera que los motores de búsqueda y los usuarios encuentran superior.
301 es el código de estado HTTP para una redirección permanente. Por lo tanto, un comando 301 invocado por htaccess le permite a los motores de búsqueda saber que cualquier autoridad / enlace acumulado por la antigua URL debe dirigirse a la nueva URL para siempre. Las redirecciones 301 son el pan y la mantequilla de la normalización de URL.
La sintaxis
La redirección 301 es extremadamente simple:
Redirect 301 /ruta/archivo.php http://www.yoursite.com/nuevaruta/archivo.php
La necesidad de más poder
Redirigir páginas usando el comando estándar 301 que se muestra arriba es extremadamente simple cuando tiene un número pequeño de páginas para considerar.
Sin embargo, una vez que las reglas se vuelven más complejas, como una transferencia de directorio o sitio, el comando redirect 301 se vuelve extremadamente ineficiente en el tiempo.
Crear un redireccionamiento 301 para miles de páginas fácilmente puede llevar días de aburrido trabajo.
¿La solución? La herramienta de reescritura de Apache.
Una palabra sobre expresiones regulares
Si bien los siguientes ejemplos en el resto del artículo pueden modificarse ligeramente para adaptarse a sus necesidades, le recomiendo que aprenda expresiones regulares. No son tan difíciles como parecen.
Un ejemplo simple usando la reescritura
Antes de declarar RewriteRules, necesita decirle a .htaccess que encienda el Rewrite Engine.
Coloque lo siguiente cerca de la parte superior de su archivo .htaccess: RewriteEngine On La sintaxis para Rewrite Rules es la siguiente:
ReWriteRule url_pattern file_reference
[FLAGS]Vamos a definir estos
Patrón de URL: un patrón de expresión regular que desencadenará la reescritura
Referencia de archivo: el archivo que se mostrará
FLAGS: mejoras opcionales como redirección o coincidencia insensible a mayúsculas y minúsculas
1. Cambiar la extensión de archivo
Por ejemplo, supongamos que su antiguo servidor solo le permite mostrar archivos html sencillos. Ahora que se ha mudado a un host que no usa disquetes, ha decidido implementar algunos php.
Usted tenía una tonelada de archivos html que ahora son archivos php, y no desea incurrir en ningún problema de contenido duplicado o perder el jugo de enlace que esas páginas html habían acumulado.
La solución:
RewriteBase /
RewriteRule ^(.*).html$ $1.php [R=301,L]
Así que ahora todas las solicitudes a www.yoursite.com/whatever.html se redireccionan a www.yoursite.com/whatever.php
Explicación:
Comencemos con el patrón de URL
^ (. *). html $
Ahora sección por sección:
^ El símbolo de intercalación coincide con el comienzo de una cadena. En nuestro caso, la cadena es la URL. Rara vez excluyes el caret; sin el intercalado, puede introducir ambigüedades.
(. *) El operador de punto para expresiones regulares coincide con cualquier carácter. El siguiente cuantificador en estrella representa «0 o más instancias». Por lo tanto, * juntos produce «cualquier carácter, 0 o más veces». Por ‘0 o más’, no implica que el carácter deba repetirse:. * Coincide con las cuerdas aaaaa y 23e2323. Cualquier personaje, cualquier número de veces.
El paréntesis alrededor del punto y * indican al motor que almacene (recuerde) estos caracteres coincidentes en lo que llamamos una referencia de referencia (un poco como una variable). Esto nos permite (re) usar estos caracteres más adelante, ¡lo cual es extremadamente útil!
.html$ Sabemos que .html es una extensión. Sin embargo, como se definió anteriormente, el operador punto representa cualquier carácter. Entonces el patrón «.html» para un motor de expresiones regulares puede ser «9html» o «lhtml», ¡cualquier cosa! Al utilizar el carácter de escape, le decimos al motor que queremos, literalmente, coincidir con un punto.
El signo de dólar coincide con el final de la cadena. La combinación del símbolo de intercalación y el signo de dólar garantiza que nuestro patrón coincida con la URL completa y no solo con una subcadena de la URL.
Ahora que hemos terminado el patrón, echemos un vistazo a la referencia del archivo.
$1.php El paréntesis en el patrón url nos ayudó a capturar todos los caracteres hasta la extensión .html. Podemos acceder a estas referencias a través del signo de dólar.
$1 coincide con la primera referencia, $2 coincide con el segundo, y así sucesivamente.
Ahora los archivos como website.com/file.html harán referencia a website.com/file.php
Pero en este ejemplo, no queremos detenernos en la referencia. Si dejamos las banderas al final, el código tal como es simplemente mostraría el contenido de file.php aunque la url sigue siendo file.html. ¡Eso es solo contenido duplicado!
Al colocar las banderas [R = 301, L] al final de la regla de reescritura, damos la señal para redireccionar a file.php y hacer que residan en la URL.
Esto puede parecer un poco complejo al principio, pero después de familiarizarse con expresiones regulares comprenderá fácilmente reglas de reescritura como esta.
2. Más reescritura de fragmentos
Forza www en URL:
RewriteCond% {HTTP_HOST}! ^ www.yourwebsite.com [NC] RewriteRule ^ (. *) $ http://www.yourwebsite.com/$1 [R = 301, L]
3. Las URL sin extensiones se deben ejecutar a través de php.
Por ejemplo, website.com/work cargará website.com/work.php, pero la url no tendrá la extensión (¡y las URL sin extensión son sexys!)
RewriteRule ^$index.php RewriteRule ^((?!(.|.php)).)*$ $0.php
4. Redirigir index.php a las opciones de la raíz
+FollowSymLinks
DirectoryIndex index.php RewriteCond% {THE_REQUEST} ^[AZ]{3,9}/index.php HTTP /
RewriteRule ^index.php$ http://www.yourwebsite.com/[R=301,L]
5. Uso de Rewrite With WordPress:
Digamos que está utilizando WordPress y desea una bonita URL para representar los libros listados por autor en una página de libros. WordPress ejecuta sus propias reglas de reescritura que redirigen todo a index.php, por lo que muchas de sus reglas de reescritura no funcionarán porque probablemente esté intentando reescribir una URL que ya se ha reescrito.
La solución consiste en utilizar el parámetro de nombre de página GET de index.php.
RewriteRule ^author/(.+)$ index.php?pagename=books&author=$1
Así que la url aparecerá como www.buybooks.com/author/king, pero el servidor cargará el archivo php como si fuera www.buybooks.com/index.php?pagename=books & author=king fue ingresado. Esto significa que tiene acceso a los valores a través de $ _GET en la página de libros de su tema. Bastante útil para un desarrollador de WP que quiera organizar la información.
El mundo de las expresiones regulares es bastante fascinante. Las reescrituras permiten que sus sitios se vuelvan más organizados ¡Y más flexibles!