proxyurl-rewritingforwardtuckey-urlrewrite-filterdotcms

'redirect' and 'proxy' vs 'forward' and 'passthrough' in Tuckey URLRewrite


Note that, in my attempt to display code examples, I will redact/edit out any references to the company for whom I work in an effort to obscure their identity, not so much to hide the fact that I'm even asking. It should also be of note that I am very new to this game of UrlRewrite/Tuckey/dotCMS.

I have been having trouble getting a redirect to work. It's using Tuckey URLRewrite through dotCMS. The attempt is to redirect, but as a forward versus a proxy, for SEO purposes.

I've found that the following works ('redirect' and 'proxy' are interchangeable here):

<to type="proxy">http://[redacted]:8080$1$3?%{query-string}</to>

However, the following leads to a 404 ('forward' and 'passthrough' are interchangeable here):

<to type="forward">http://[redacted]:8080$1$3?%{query-string}</to>

The entirety of the rule is as follows:

      <!-- EN with Query Params -->
  <rule>
    <from>^/([^/]+)/en/([^/]+)?$</from>
    <to type="proxy" qsappend="true">[redacted]:8080$1$3&amp;%{query-string}</to>
  </rule>
  <!-- EN without Query Params -->
  <rule>
    <from>^(.*)(\/en)(\/.*)?$</from>
    <to type="proxy">[redacted]:8080$1$3?%{query-string}</to>
  </rule>

Some of my initial questions (as many more are likely to arise):

  1. Is there such a difference between 'proxy'/'redirect' and 'forward'/'passthrough' that more specialized efforts to achieve a meaningful redirect need to be implemented?
  2. Am I missing something in other configuration files that may affect the outcomes of these attempts at redirection?

EDIT: The differences in RegEx are me trying things to see if that could possibly be where the disconnect is occurring


Solution

  • Because urls in dotCMS do not really exist, the servlet requestdispatcher, which is used by forward rules, does not work. You need to set a request attribute, CMS_FILTER_URLMAP_OVERRIDE, which dotCMS will respect. In code, this looks like:

        NormalRule forwardRule = new NormalRule();
        forwardRule.setFrom( "^/example/forwardDotCMS/(.*)$" );
        SetAttribute attribute = new SetAttribute();
        attribute.setName("CMS_FILTER_URLMAP_OVERRIDE");
        attribute.setValue("/about-us/index");
        forwardRule.addSetAttribute(attribute);
        addRewriteRule( forwardRule );