These instructions assume that you have an Hippo project based on the Hippo project archetype, i.e. a Maven project consisting of at least three modules: cms, site and content.
In the main pom.xml of the project, in the repositories section, add this repository if it is not configured there yet.
<repository> <id>hippo-forge</id> <name>Bloomreach Forge maven 2 repository.</name> <url>https://maven.onehippo.com/maven2-forge/</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> <layout>default</layout> </repository>
Specify the version in the properties section of your project's root pom:
<forge.urlrewriter.version>1.0X.XX</forge.urlrewriter.version>
Add CMS plugin to the CMS pom:
<dependency> <groupId>org.onehippo.forge.urlrewriter</groupId> <artifactId>urlrewriter-module-cms</artifactId> <version>${forge.urlrewriter.version}</version> </dependency>
Add repository plugin to the CMS pom (since 1.03.00):
<dependency> <groupId>org.onehippo.forge.urlrewriter</groupId> <artifactId>urlrewriter-module-repository</artifactId> <version>${forge.urlrewriter.version}</version> </dependency>
Add HST plugin to the site pom:
<dependency> <groupId>org.onehippo.forge.urlrewriter</groupId> <artifactId>urlrewriter-module-hst</artifactId> <version>${forge.urlrewriter.version}</version> </dependency>
Configure the RewriteFilter in the site's web.xml
Add to the parameter hst-bean-annotated-classes the beans of URL Rewriter (NB since 7.9, org/onehippo/forge/** is already there by default):
<context-param> <param-name>hst-beans-annotated-classes</param-name> <param-value>classpath*:org/onehippo/forge/rewriting/beans/**/*.class</param-value> </context-param>
And add the HippoRewriteFilter to the web.xml:
<filter> <filter-name>RewriteFilter</filter-name> <filter-class>org.onehippo.forge.rewriting.HippoRewriteFilter</filter-class> <!-- sets up log level (will be logged to context log) can be: TRACE, DEBUG, INFO (default), WARN, ERROR, FATAL, log4j, commons, slf4j, sysout:{level} (ie, sysout:DEBUG) if you are having trouble using normal levels use sysout:DEBUG (default WARN) --> <init-param> <param-name>logLevel</param-name> <param-value>slf4j</param-value> </init-param> <!-- you can disable status page if desired can be: true, false (default true) --> <init-param> <param-name>statusEnabled</param-name> <param-value>true</param-value> </init-param> <!-- you can change status path so that it does not conflict with your installed apps (note, defaults to /rewrite-status) note, must start with / --> <init-param> <param-name>statusPath</param-name> <param-value>/rewrite-status</param-value> </init-param> <init-param> <param-name>statusEnabledOnHosts</param-name> <param-value>localhost, 127.0.0.*, *.lan, *.local</param-value> </init-param> <init-param> <param-name>rulesLocation</param-name> <param-value>/content/urlrewriter</param-value> </init-param> </filter>
Important!
In your web.xml, add the filter mapping as first entry after CharacterEncodingFilter
and before the other filter mappings like HstFilter.
See also Tomcat FAQ about encoding: Character Encoding Issues
<filter-mapping> <filter-name>RewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
Add the REQUEST and FORWARD dispatchers to your HstFilter filter mapping:
<filter-mapping> <filter-name>HstFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
In the Spring context of your site module, add a RewritingManager that reads the rules from the repository and an EventListener for invalidation of the manager when rules are changed in the CMS.
To do so, copy file "/site/src/main/resources/META-INF/hst-assembly/overrides/urlrewriting-context.xml" from the demo project to the following location within your project: {PROJECT_ROOT}/site/src/main/resources/META-INF/hst-assembly/overrides/
When deploying a newly installed URL rewriter to an existing repository, be sure to make the plugin bootstrap itself by setting system property repo.bootstrap=true. See more at Content Bootstrap at onehippo.org.
In URL Rewriter v1.04.01, the validator required in the document type [1] does not execute non-empty validation for "type" field, which results in the document successfully saved even when the required field is empty. Adding extra validator non-empty will give a proper behavior and warning when the type field is empty.
This step should be done for the following document type: rule, advancedrule and xmlrule
[1] /hippo:namespaces/urlrewriter/rule/hipposysedit:nodetype/hipposysedit:nodetype/ruletype[@validators=required]