Hacer un redirect 301 en .htaccess es muy sencillo. Este redireción se utiliza cuando necesitamos cambiar urls de nuestras webs y no perder el posicionamiento de dichas urls al redirigirlas.
Esta redirección avisa a los buscadores que el contenido se ha redirigido permanentemente a otra url. Entonces los buscadores reindexan las nuevas urls y no perdemos el posicionamiento que teníamos ganado anteriormente.
Es importante que cuando hablo de url me refiero que las redirecciones se pueden aplicar tanto a ficheros del servidor como a las páginas.
Los casos prácticos los voy a hacer en .htaccess, aunque también se puede hacer con la función Header() en PHP.
Entre los ejemplos veremos casos prácticos como la redirección de una URL, redirección de dominio y redirección de directorio. Las funciones usadas serán:
- .htaccess redirect 301
- .htaccess redirectmatch 301
- .htaccess redirectmatch permanent
- .htaccess RewriteRule
Os puede resultar interesante la siguiente entrada:
Diferencia entre ‘redirect 301’ y ‘redirectmatch 301’
- ‘redirect 301‘ se usa para redirigir una única url por cada línea de código en el .htaccess
- Mientras que ‘redirectmatch 301‘ se usa cuando queremos establecer unas reglas de redirección usando expresiones regulares (patrones), y así todas las urls que cumplan esas reglas se redirigirán a las nuevas.
Redirección de una URL con ‘redirect 301’
En este código de ejemplo queremos redirigir una url a otra url de la misma página.
1 2 3 |
RewriteEngine On RewriteBase / Redirect 301 /urlactual.html https://www.tudominio.com/urlnueva.html |
Redirección 301 de urls basándonos en expresiones regulares con ‘redirectmatch 301’
El uso de expresiones regulares en .htaccess es muy usado dado el ahorro de código que supone.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
RewriteEngine On RewriteBase / #redirect de todo el contenido de una web a otro dominio respetando la estructura de urls, veamos 2 maneras de hacerlo RedirectMatch 301 /(.*) https://www.tudominio.com/$1 RedirectMatch permanent /(.*) http://wwws.tudominio.com/$1 #redirect de todo el contenido de una web a la home de otro domino, os pongo 2 ejemplos RedirectMatch 301 ^(.*)$ https://www.sitio.com RedirectMatch permanent ^(.*)$ https://www.sitio.com #redirect del contenido de un directorio a otro nuevo respetando estructura de urls a partir del directorio redirigido, también vale si la dirección nueva está en otro dominio RedirectMatch 301 /directorio-actual/(.*) https://www.tudominio.com/directorio-nuevo/$1 RedirectMatch permanent /directorio-actual/(.*) https://www.tudominio.com/directorio-nuevo/$1 |
Redirect 301 con ‘RewriteRule’
RewriteRule hace la misma función que RedirectMatch solo que con diferente declaración, os pongo un ejemplo.
1 2 3 |
RewriteEngine On RewriteBase / RewriteRule /directorio-actual/(.*) https://www.tudominio.com/directorio-nuevo/$1 [R=301,L] |
Con estas 3 maneras de hacer redirect 301 cubrimos la mayor parte de necesidades con las que nos encontraremos habitualmente.