es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cadena de consulta no redirigida en directorios de nivel más profundo.

Quiero redirigir cada enlace con una cadena de consulta a una dirección específica mediante la adición de la cadena. Tengo lo siguiente en mi archivo .htaccess de WordPress:

RewriteEngine On
RewriteCond %{QUERY_STRING} catid=([0-9]+) [NC]
RewriteRule (.*) catid%1? [R=301,L]

Cuando un usuario ingresa example.com/?catid=10, son redirigidos correctamente a example.com/catid10, que es lo que quiero.

Sin embargo, cuando van a un directorio más profundo (example.com/category/?catid=10), no son redirigidos a example.com/category/catid10.

He estado leyendo manuales pero no encuentro la respuesta.

Editar

Si esto es útil, esto es lo que WordPress ha definido en mi htaccess:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema es que la regla actual de .htaccess únicamente coincide con la cadena de consulta cuando aparece en el nivel raíz de la URL (ejemplo.com/?catid=10). Para lograr que funcione en URLs que tienen segmentos de ruta adicionales, se necesita modificar la RewriteRule para incluir esos segmentos en el objetivo de redirección. A continuación, se presenta una regla actualizada que debería funcionar:

    RewriteEngine On
    RewriteCond %{QUERY_STRING} catid=([0-9]+) [NC]
    RewriteRule ^(.*)$ /$1catid%1? [R=301,L]
    

    Al agregar ^ al principio del patrón, le indicamos a Apache que solo coincida con URLs que comiencen con el patrón. Al usar (.*) en lugar de .*, capturamos toda la ruta de la URL como un grupo al que podemos referirnos con $1 en la cadena de reemplazo. Al incluir ese $1 en la cadena de reemplazo (/$1catid%1), preservamos los segmentos de ruta originales al tiempo que agregamos el valor de la cadena de consulta.

    ¡Espero que esto ayude!

Comments are closed.