Mapping vanity URLs with rules

October 8, 2024

 

URL mapping rules

The SEO module provides rule consequences (right-hand-side part of a rule) to manipulate URL mappings for content objects. The following example, included into Jahia News module, shows the usage of these consequences for automatic generation of URL mappings for news items based on their title.

package org.jahia.modules.seo.rules

//list any import classes here.
import org.jahia.services.content.rules.*
import org.jahia.services.content.JCRContentUtils
import org.slf4j.Logger

expander rules.dsl

//declare any global variables here
global User user
global Service service
global Logger logger
global SeoService seoService
global JCRContentUtils jcrUtils

rule "Add generated URL mapping for news item"
    when
        A property jcr:title has been set on a node
        The node has a parent
            - the parent has the type jnt:news
    then
        Remove URL mappings for node parent and language node.getProperty("jcr:language").getStringValue()
        Add URL mapping "/news/" + jcrUtils.generateNodeName(propertyValueAsString, 70) for node parent and language node.getProperty("jcr:language").getStringValue()
end

The Remove URL mappings for node... action deletes current URL mappings for the language, where as the second action - Add URL mapping... assigns a new mapping, generating it from the title value (propertyValueAsString in the rule above).