Saltar al contenido

Drupal – ¿Cómo usar el módulo de Reglas para implementar un redireccionamiento personalizado para una URL desactualizada?

Solución:

Por qué usar .htaccess podría no ser una opción

Hay situaciones en las que configurar un redireccionamiento en su .htaccess archivo puede no ser una opción, como:

  • no se le permite (= no “tiene”) acceso de edición a su archivo .htaccess.
  • su proveedor no permite directivas específicas en archivos .htaccess (que le gustaría usar).
  • su sitio Drupal se ejecuta en IIS.
  • no tiene los conocimientos necesarios para codificar correctamente la redirección en su .htaccess.
  • … (¿Qué otra cosa?).

Todas estas son razones para utilizar un enfoque basado en el módulo de Reglas, como se detalla más adelante.

Usar reglas con ‘Drupal se está inicializando’

Si usa el módulo de Reglas para que esto funcione, debería poder usar el “Drupal se está inicializando“. Eso garantizará que la regla se active ANTES de que se muestre el contenido real.

Usa una expresión regular

El enlace que desea “interceptar” debe tener el formato de algún tipo de expresión regular, que luego debe utilizar como sus reglas “Condición”. para que tenga una regla que corresponda a “antes de mostrar el contenido real de algo que coincide con una ruta específica …”. Después de que esa parte funcione, la “acción” de las Reglas debe especificar el redireccionamiento real que se realizará.

Observación: en este caso también puede utilizar “contains /content?name=“(en lugar de la expresión regular) para que la coincidencia de texto funcione.

Regla de muestra

Consulte la parte “opción 1” de mi respuesta a la pregunta sobre “¿Cómo restringir el acceso a un nodo a través del nodo / 12 y permitir el acceso a través de una ruta como contenido / algún título?”, Que contiene esta regla en formato de exportación:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node/\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, URLs like [site:current-page:url] are not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

Aquí hay algunos ajustes sugeridos del ejemplo anterior, para que funcione también en su caso:

  • nombre y etiqueta de la máquina.
  • Reemplace la node/* por su ruta (en la “etiqueta” y la expresión regular).
  • reemplace la ruta en la parte de acción de la regla por su ruta de destino (más detalles a continuación) y verifique si desea que se muestre algún tipo de mensaje de error (si no, elimine esa parte de la acción).

Utilice el valor de la [name] variable en la redirección

Para que el valor del argumento de URL esté disponible como nueva variable para las reglas, puede utilizar el módulo Argumento de URL de las reglas. Aquí hay una cita al respecto (de su página de proyecto):

… proporciona dos condiciones de reglas basadas en argumentos de URL:

  • compruebe si hay un argumento de URL.
  • compare el valor de un argumento de URL.

También proporciona una acción que hace que el valor de un argumento de URL esté disponible como nueva variable para las reglas.

Las acciones y condiciones de Reglas proporcionadas recientemente se pueden encontrar en las condiciones y grupos de acciones de “Argumento de URL” en la interfaz de configuración de reglas.

Para ver un ejemplo de cómo usarlo, consulte el comentario n. ° 3 en el número 1686360, que trata sobre “Pasar una cantidad a la url, es decir; sitio / contenido / título-nodo? cantidad = 10 o / título-nodo? = cantidad: 10“. Aquí está la parte relevante:

  • agregue una condición “Verifique si existe un argumento de URL” a su regla y establezca el valor “ARGUMENTO” en “monto”.
  • agregue la acción “Proporcionar valor de argumento de URL” a la regla y establezca el valor de “NOMBRE DE ARGUMENTO DE URL” en “monto” y en la sección “Variables proporcionadas” “ARGUMENTO DE URL – Nombre de variable” en, por ejemplo, “amount_from_url“.

Ahora podrá utilizar el valor de la cantidad como variable “amount-from-url“para otras acciones en esta regla.

PD: Si no está familiarizado (lo suficiente / todavía) con las Reglas, consulte los 32 (!!!) tutoriales en video excelentes y gratuitos Aprenda el marco de trabajo de las Reglas.

Para las redirecciones 301, es posible que desee consultar el módulo Redirección global. Algunos detalles más al respecto (de su página de proyecto):

GlobalRedirect es un módulo simple que …

  • Comprueba la URL actual en busca de un alias y lo redirecciona 301 si no se está utilizando.
  • Comprueba la URL actual para ver si hay una barra inclinada, la elimina si está presente y repite la comprobación 1 con la nueva solicitud.
  • Comprueba si la URL actual es la misma que site_frontpage y redirige a la página principal si hay una coincidencia.
  • Verifica si la función Limpiar URLs está habilitada y luego verifica que se esté accediendo a la URL actual usando el método limpio en lugar del método ‘no limpio’.
  • Comprueba el acceso a la URL. Si el usuario no tiene acceso a la ruta, no se realizan redireccionamientos. Esto ayuda a evitar la exposición de nodos con alias privados.
  • Asegúrese de que el caso de la URL a la que se accede sea el mismo que el establecido por el autor / administrador. Por ejemplo, si establece el alias “artículos / elaboración de pasteles” en el nodo / 123, el usuario puede acceder al alias con cualquier combinación de mayúsculas y minúsculas.
  • La mayoría de las opciones anteriores se pueden configurar en la página de configuración. En Drupal 5 puede acceder a esto después de habilitar el módulo globalredirect_admin. En Drupal 6, la página de configuración está incluida en el módulo.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *