简体   繁体   中英

'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

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 );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM