
  


---
title: "Cómo configurar redirecciones de URL con parámetros en Apache con htaccess - Carlos Sánchez"
description: "Aprende a hacer todo tipo de redirecciones con parámetros en apache para ahorrar tiempo. En este tutorial te mostraremos distintas formas de redireccionar con parámetros en apache, desde redirecciones simples hasta redirecciones más complejas."
author: "Carlos Sánchez"
url: https://carlossanchezdonate.com/articulo/redireccionar-parametros-htaccess/
image: https://carlossanchezdonate.com/wp-content/uploads/tb-parametrosredirect.jpg
---





# Redireccionar con parámetros en Apache




                Aprende a hacer todo tipo de redirecciones con parámetros en apache para optimizar tu sitio web para los motores de búsqueda.






![Redireccionar con parámetros en Apache](https://carlossanchezdonate.com/wp-content/uploads/cover-parametrosredirect.jpg)




**Autor:**

        : [Carlos Sánchez](https://carlossanchezdonate.com/sobre-mi/)


**Temática: **
: [Servidores](https://carlossanchezdonate.com/seo-avanzado/servidores/)




**Fecha de publicación:**

        : 2022-07-04



**Última revisión:**

        : 2024-12-06




        **Índice**
                mostrar


        1
                ¿Qué es un parámetro?
        1.1
                ¿Para qué sirven los parámetros?
        1.2
                ¿Cómo afectan los parámetros al SEO?
        2
                Teoría de las Redirecciones con parámetro en htaccess
        3
                Redirigir parámetros a otros parámetros
        3.1
                Parámetro A a Parámetro B
        3.1.1
                Cambio de parámetro A a Parámetro B con una URL específica
        3.1.2
                Cuando solo se quiere cambiar una palabra del parámetro
        3.2
                Parámetros con valor a otro
        4
                Redireccionamiento de Parámetros a URL distintas
        4.1
                Mover los parámetros a otra URL y evitar un bucle
        4.2
                Toda la URL que contenga X palabra en su parámetro, que se mueva a esta página
        4.3
                Convertir de parámetros a subdirectorios
        5
                Redirigir a la URL Madre
        5.1
                Redirigir todos los parámetros a la URL madre en una URL específica
        5.2
                Redirigir un parámetro en específico de UNa URL a la madre en una URL específica
        5.3
                Eliminar cualquier parámetro o un parámetro específico en cualquier URL
        6
                Forzar 404 con parámetros
        6.1
                404 en cualquier parámetro de una URL Particular
        6.2
                404 a los parámetros que coincidan con algo en específico
        7
                Añadir parámetros a una URL
        8
                Configuraciones
        9
                Bibliografía

Aunque tengo desarrolladas unas magníficas **[herramientas para hacer redirecciones desde el servidor](https://carlossanchezdonate.com/recursos/redirecciones-servidor/),** todavía me falta mejorarlas y añadirles funciones. Cuestión que está en marcha.

Una de las carencias de esta herramienta actualmente es a la hora de redireccionar con parámetros, ya que, ni **mod_alias**, ni **RedirectMatch** reconocen lo que sería una Query String (lo que se conoce como parámetro). Afortunadamente si se pueden hacer un gran conjunto de redirecciones de parámetros, con el maravilloso **mod_rewrite**, así que mostraré unos cuantos ejemplos, que entendiendo cada uno de ellos y modificándolos para cada necesidad específica, nos valdrá para redireccionar parámetros en Bulk, de cualquier forma para que nos sea rápido y cómodo.

## ¿Qué es un parámetro?

Para entender cómo redireccionar los parámetros, tenemos que tener un mínimo conocimiento de qué son o cómo funcionan, aunque para hacer sencillo el post simplificaré el concepto.

`https://carlossanchezdonate.com/?todo-lo-que-venga-despues-de-interrogacion`

Cada vez que haya [una URL](https://carlossanchezdonate.com/articulo/sintaxis-de-urls/) que tenga una interrogación, es una URL parametrizada, y podríamos decir que todo lo que vaya después de esa interrogación es el parámetro.

**
Por defecto, en una URL un parámetro no modificará el contenido de la página, por lo que mostrará el mismo contenido siendo una URL diferente. Por eso es importante configurar un [Self-Canonical](https://carlossanchezdonate.com/articulo/self-canonical/).

— [Carlos Sánchez](https://carlossanchezdonate.com/sobre-mi/).

### ¿Para qué sirven los parámetros?

Los parámetros tienen infinidad de funciones. Con parámetros se puede: ordenar contenido; filtrar contenido; restringir contenido; segmentar por región; traquear información; paginar contenido; segmentar por idioma; hacer A/B testing; [optimizar contenido de la caché](https://carlossanchezdonate.com/articulo/cache-en-el-seo/) e incluso forzar ciertas herramientas de rastreo entre otras aplicaciones.

Son un aliado muy poderoso para un desarrollador web y para un SEO Técnico.

### ¿Cómo afectan los parámetros al SEO?

Los parámetros en el SEO son mucho más que lo que significaba utilizar la [herramienta de parámetros de G Search Console](https://carlossanchezdonate.com/noticia/parametros-search-console-herramienta/), tenemos que tenerlo muy en cuenta sobre todo para las analíticas, por eso hasta el propio Google desarrolló un [generador de parámetros](https://ga-dev-tools.web.app/campaign-url-builder/) (para que sea más fácil traquear con Analytics).

Tenemos que tener en cuenta que, aunque Google cada vez los entiende mejor, pueden ofrecer contenidos totalmente distintos e incluso traducciones. Por eso, es importante tener un amplio conocimiento de las [metaetiquetas](https://carlossanchezdonate.com/seo-avanzado/metaetiquetas/) y tener previsto un self-canonical, por si en nuestra web entran añadiendo parámetros inesperados, que no se tome como una URL de contenido diferente.

## Teoría de las Redirecciones con parámetro en htaccess

Todos los códigos que pongo aquí deberían ir en el archivo .htaccess del ROOT del proyecto, en el caso de que uses [Apache](https://carlossanchezdonate.com/articulo/apache/) como servidor. Siempre es recomendable hacer todos los cambios en un entorno de prueba previamente, para asegurarnos que no se están indicando directrices contradictorias al propio servidor.

Todas estas redirecciones tendrán un código similar a este. Pongo este como ejemplo de plantilla para explicar como funciona y pasamos a los ejemplos.

`

RewriteCond %{REQUEST_URI} ^/contacto/

RewriteCond %{QUERY_STRING} ([a-zA-Z0-9])

RewriteRule (.*) $1otraurl-%1/ [R=301,L,QSD]

`

Todas estas redirecciones irán dentro de un <ifmodule mod_rewrite.c> dando por hecho que está puesto previamente el código RewriteEngine On.

Hay que tener en cuenta que el orden de los códigos en el .htaccess para evitar conflictos.

Los comandos principales que utilizaremos serán:

%{REQUEST_URI}: Sirve para indicar a que URL nos referimos. Es decir la URL a redirigir.

%{QUERY_STRING}: Sirve para indicar que debe haber en el parámetro a redirigir.

RewriteRule: Sirve para indicar el destino de la redirección.

Con esto y [un poquito de Regex](https://carlossanchezdonate.com/articulo/regex-xpath-y-selectores/)se puede hacer auténtica magia.

%1: Retorna el valor de las coincidencias recogidas en los Rewritecond. El 1 indica el número de grupo Match del Regex.

$1: Retorna el valor de la URI afectada. El 1 indica el número de grupo Match del Regex.

([a-zA-Z0-9]): Todos los caracteres alfanuméricos.

(.*): Todos los caracteres.

En cualquier caso, mostraré unos cuantos ejemplos para que se entienda el potencial que pueden tener estas redirecciones, que nos pueden servir para múltiples propósitos. Especialmente en las migraciones.

Aconsejo probar las expresiones regulares con [Regex101](https://regex101.com/). Y tener en cuenta si en nuestra [URL a redireccionar hay algún carácter especial o espacio](https://carlossanchezdonate.com/articulo/redireccion-caracteres-espacios/).

## Redirigir parámetros a otros parámetros

### Parámetro A a Parámetro B

`

RewriteCond %{QUERY_STRING} parametroA

RewriteRule (.*) $1?ParametroB [R=301,L,QSD]

`

Con esto se consigue que toda URL que contenga el parámetro: parametroA se rediriga a parametroB

#### Cambio de parámetro A a Parámetro B con una URL específica

`

RewriteCond %{REQUEST_URI} ^/contacto/

RewriteCond %{QUERY_STRING} parametroA

RewriteRule (.*) /contacto/?ParametroB [R=301,L,QSD]

`

#### Cuando solo se quiere cambiar una palabra del parámetro

Imaginemos que se ha configurado mal el Campaign URL Builder para ads, y que en vez de google se puso gogle, lo cual está alterando todas las analíticas (pongo este caso entre otros muchos que podrían pasar).

![](https://carlossanchezdonate.com/wp-content/uploads/parameter-campaing-redirect-google.jpg)
Una solución pasaría por aquí:

`

RewriteCond %{QUERY_STRING} utm_source=gogle(.*)

RewriteRule (.*) $1?utm_source=google%1 [R=301,L,QSD]

`

De esta forma conseguiremos que en toda la web, todas las URL que vayan a esa versión de parámetro se redirijan a la correcta. Pasando de:

http://sanchezdonate.test/contacto/?utm_source=gogle&utm_medium=cpc&utm_campaign=jobs&utm_id=pruebaa

http://sanchezdonate.test/contacto/?utm_source=google&utm_medium=cpc&utm_campaign=jobs&utm_id=pruebaa , esta solución te permite corregir errores de tipeo en ciertos filtros en masa.

Ahora, puede ocurrir que estemos buscando reemplazar absolutamente todo parámetro que contenga la palabra gogle por Google, reemplazando solo esa palabra (no resignándonos sólo a copiar todo el inicio hasta llegar a dicha palabra para reemplazar).

Así sería la solución más óptima:

`

RewriteCond %{QUERY_STRING} (.*)(gogle)(.*)

RewriteRule (.*) $1?%1google%3 [R=301,L,QSD]

`

Recordemos que puedes jugar todos estos valores con todo lo que hay en el post. Por lo que puedes hacer infinitos tipos de combinaciones. Puedes designar esto para que ocurra sólo en una URL específica por ejemplo.

### Parámetros con valor a otro

Esto vale para solucionar errores del Campaign URL Builder o cuando se hace un cambio en como funcionan los filtrados o del desarrollo previo.

`

RewriteCond %{REQUEST_URI} ^/brooks/glycerin-20/

RewriteCond %{QUERY_STRING} key=value-([0-9]+)

RewriteRule (.*) /brooks/glycerin-20/?talla-%1 [R=301,L,QSD]

`

De esta forma, lo que haremos será cambiar de https://example.com/brooks/glycerin-20/?key=value-44 a https://example.com/brooks/glycerin-20/?talla-44.

## Redireccionamiento de Parámetros a URL distintas

### Mover los parámetros a otra URL y evitar un bucle

Como siempre, con Request_URI podemos seleccionar que sea de una página página en específico, o si no lo ponemos que funcione en cualquiera.

Pongamos un ejemplo. Queremos que todas las URL que vengan de Facebook, que tiene un parámetro ?fbclid= se muevan a nuestro Linktree por alguna razón, pero queremos que se mantenga el parámetro para mantenerlo registrado.

Entonces, podemos hacer que "todo lo que contenga fbclid", se mueva a linktree manteniendo el parámetro. Pero claro, si mantiene el parámetro, se redirigirá a a nuestro linktree indefinidamente, causando un error de "too many redirects"

Para evitar que se forma un bucle, lo que podríamos hacer es un "does not contain" en el Request URI, entonces "todo lo que no sea linktree con el parámetro fbclid, se moverá a linktree trayendose el parámetro consigo".

`

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^/(linktree)/ [NC]

RewriteCond %{QUERY_STRING} (fbclid)(.*)

RewriteRule (.*) /linktree/?fbclid%2 [R=301,L,QSD]

`

Esto movería todos los que tengan el parámetro de fbclid menos el directorio linktree, para que si lo contenga, le quitamos el !

### Toda la URL que contenga X palabra en su parámetro, que se mueva a esta página

Puede ocurrir que queramos que todas las URL que tengan un parámetro en específico vayan a una URL. Sea porque nos vienen de un anuncio en específico que no tenemos control o por algo de la configuración de la web.

`

RewriteCond %{QUERY_STRING} anuncios [NC]

RewriteRule (.*) /landingpage/ [R=301,L,QSD]

`

En este caso, cualquier página con el parámetro ?anuncios o que contenga la palabra anuncios, iría directo a https://example.com/landingpage/

### Convertir de parámetros a subdirectorios

Puede sucedernos que encontremos una web que tuviese toda la arquitectura hecha con parámetros, como una inmobiliaria, y hayamos conseguido que se cambie por carpetas.

¿Cómo realizaríamos ese cambio de la forma más correcta?

En este supuesto, podemos imaginar que es una inmobiliaria online, donde para categorizar por ejemplo viviendas de alquiler en Cartagena la URL sería así:

https://example.com/?alquiler-viviendas-murcia-cartagena y queremos que redireccione, pero que además funcione con todas las provincias y ciudades sin tener que poner todas a mano, de forma que con una nueva arquitectura quede así: https://example.com/alquiler/viviendas/{provincia}/{ciudad} .

Esta sería la forma:

`

RewriteCond %{QUERY_STRING} alquiler-viviendas-(.*)-(.*)

RewriteRule (.*) /alquiler/viviendas/%1/%2? [R=301,L]

`

En este caso, he puesto la ? que hay en el RewriteRule se hace para evitar que sigan habiendo parámetros. De esta forma se pueden obtener unas redirecciones bastante funcionales.

Para versiones de Apache 2.4 o superiores sería más correcto quitar la interrogación y añadir la bandera QSD como de hecho he puesto en todos los ejemplos.

`

RewriteCond %{QUERY_STRING} alquiler-viviendas-(.*)-(.*)

RewriteRule (.*) /alquiler/viviendas/%1/%2 [R=301,L,QSD]

`

## Redirigir a la URL Madre

Con esto me refiero a que los parámetros se redirijan a la propia URL sin parámetro

### Redirigir todos los parámetros a la URL madre en una URL específica

`

RewriteCond %{REQUEST_URI} ^/contacto/

RewriteCond %{QUERY_STRING} ([a-zA-Z0-9])

RewriteRule (.*) /contacto/ [R=301,L,QSD]

`

Con este ejemplo haríamos que todos los parámetros de la página de https://example.com/contacto/?loquesea se redirigiesen a https://example.com/contacto/ , es decir sin parámetro

### Redirigir un parámetro en específico de UNa URL a la madre en una URL específica

Imaginemos que sólo queremos redireccionar los parámetros que nos lleguen con una nomenclatura en específico, por ejemplo ?key=value del contacto. Esta sería la forma:

`

RewriteCond %{REQUEST_URI} ^/contacto/

RewriteCond %{QUERY_STRING} key=value

RewriteRule (.*) /contacto/ [R=301,L,QSD]

`

Con este ejemplo haríamos que todos los parámetros de la página de https://example.com/contacto/?key=value se redirigiesen a https://example.com/contacto/ , es decir sin parámetro, sin embargo, https://example.com/contacto/?loquesea se quedaría igual.

### Eliminar cualquier parámetro o un parámetro específico en cualquier URL

Si lo que se pretende es forzar una redirección de cualquier parámetro que contenga la palabra spam (por ejemplo) en cualquier URL, se haría así:

`

RewriteCond %{QUERY_STRING} spam

RewriteRule (.*) $1 [R=301,L,QSD]

`

mientras que si lo que se pretende es que no existan los parámetros en toda la web (no lo recomiendo especialmente, pero puede ocurrir por algo) sería así:

`

RewriteCond %{QUERY_STRING} [a-zA-Z0-9]

RewriteRule (.*) $1 [R=301,L,QSD]

`

## Forzar 404 con parámetros

No hay un motivo SEO de peso para realizar esta acción, pero si en algún momento se necesita que no existan de ninguna forma los parámetros de una URL en Particular, estas sería la formas:

### 404 en cualquier parámetro de una URL Particular

Con este código haríamos que todos los parámetros de la página contacto dejasen de existir, forzando un 404.

He puesto [a-zA-Z0-9] en Query String en vez de (.*) porque si no la propia página de contacto también arrojaría un código de respuesta 404

`

RewriteCond %{REQUEST_URI} ^/contacto/

RewriteCond %{QUERY_STRING} [a-zA-Z0-9]

RewriteRule ^ - [R=404]

`

### 404 a los parámetros que coincidan con algo en específico

De esta forma podríamos por ejemplo forzar un 404 a todos los parámetros que tuviesen la palabra "facebook":

`

RewriteEngine On

RewriteCond %{QUERY_STRING} facebook

RewriteRule ^ - [R=404]

`

## Añadir parámetros a una URL

Esta práctica puede ser muy útil en algún caso donde se quiera parametrizar una imagen por cuestiones como el [cache del usuario](https://carlossanchezdonate.com/articulo/cache-en-el-seo/#configurar-cache-del-usuario) y el código de la web aún no lo permita fácilmente.

`RewriteEngine On

RewriteCond %{REQUEST_URI} ^/img/imagen\.jpg$

RewriteCond %{QUERY_STRING} !^parametro$

RewriteRule ^img/imagen\.jpg$ /img/imagen.jpg?parametro [R=302,L,QSD]`

Nótese la importancia del query_string en este caso, ya que por medio de la exclamación "!" está añadiendose una excepción, para que de esta forma el rewriterule no funcione cuando el parámetro sea literalmente "?parametro", de esta forma como lo que estamos haciendo finalmente es redirigir todas las rutas posibles de esa imagen a su versión con el parámetro "parametro" evitamos una cadena de redirecciones.

> Nota importante: WordPress tiene una configuración muy específica dentro de la carpeta wp-content, este tipo de redirección no va a funcionar dentro de esa carpeta a menos que añadamos hooks específicos debido al core del propio CMS y a cómo está planteado.

## Configuraciones

Con todos los ejemplos aquí expuestos, más las explicaciones se pueden hacer innumerables combinaciones para cualquier caso específico.

> TODOS LOS CÓDIGOS AQUÍ EXPUESTOS ESTÁN TESTEADOS Y PROBADOS ANTES DE LA PUBLICACIÓN PARA EVITAR ERRORES. No obstante no me hago responsable de malas implementaciones que se hagan por desconocimiento.

Para todos estos ejemplos se ha utilizado la [versión 2.4.47](https://httpd.apache.org/docs/2.4/) de Apache y todos los códigos funcionan correctamente.

> Importante: El orden del código en un .htaccess es de vital importancia. Realiza los cambios con alguien que sepa o con ayuda de la IA, y nunca en el entorno en producción.

## Bibliografía

[Query String Reds by Jeff Starr](https://perishablepress.com/redirect-query-string-htaccess/)


        Si te gusta este artículo, me ayudarías un montón compartiendo mi contenido:

        Compartir:


                [![Compartir en LinkedIn](https://carlossanchezdonate.com/wp-content/themes/sanchezdonate/images/rrss/linkedin.svg)](https://www.linkedin.com/cws/share/?url=https://carlossanchezdonate.com/articulo/redireccionar-parametros-htaccess/)



                [![Compartir en Twitter](https://carlossanchezdonate.com/wp-content/themes/sanchezdonate/images/rrss/tw.svg)](https://twitter.com/intent/tweet?url=https://carlossanchezdonate.com/articulo/redireccionar-parametros-htaccess/)



                [![Compartir en Facebook](https://carlossanchezdonate.com/wp-content/themes/sanchezdonate/images/rrss/facebook.svg)](https://www.facebook.com/sharer/sharer.php?u=https://carlossanchezdonate.com/articulo/redireccionar-parametros-htaccess/)



                [![Compartir en WhatsApp](https://carlossanchezdonate.com/wp-content/themes/sanchezdonate/images/rrss/whatsapp.svg)](whatsapp://send?text=https://carlossanchezdonate.com/articulo/redireccionar-parametros-htaccess/)



                [![Compartir en Telegram](https://carlossanchezdonate.com/wp-content/themes/sanchezdonate/images/rrss/tlg.svg)](https://telegram.me/share/url?url=https://carlossanchezdonate.com/articulo/redireccionar-parametros-htaccess/)





        No se te da mal el SEO Técnico

Te falta mi máster**. Accede a una formación avanzada que te permitirá aplicar e implementar SEO en cualquier tipo de WEB

        [¡Accede al Máster de SEO Técnico!](/master-seo-tecnico/)



  Tal vez te interesen otros artículos:
  [Artículos de SEO](/seo-avanzado/)





                [URL Mayúsculas y minúsculas](https://carlossanchezdonate.com/articulo/url-mayusculas-y-minusculas/)







                [Sitemaps](https://carlossanchezdonate.com/articulo/sitemaps/)







                [Curación de enlaces en el SEO](https://carlossanchezdonate.com/articulo/curacion-de-enlaces-en-el-seo/)







                [Texto alternativo para imágenes](https://carlossanchezdonate.com/articulo/alt-imagenes/)







                [Rich Snippets con HTML](https://carlossanchezdonate.com/articulo/rich-snippets-sin-datos-estructurados/)
