Tuckey URLRewrite中的'redirect'和'proxy'与'forward'和'passthrough'

时间:2017-09-07 20:13:54

标签: proxy url-rewriting forward tuckey-urlrewrite-filter dotcms

请注意,在我尝试显示代码示例时,我将编辑/编辑对我工作的公司的任何引用,以掩盖其身份,而不是隐瞒我的事实。甚至问。还应该注意的是,我对这款UrlRewrite / Tuckey / dotCMS游戏不熟悉。

我在重定向工作时遇到了麻烦。它通过dotCMS使用Tuckey URLRewrite。尝试重定向,但作为前向与代理,用于SEO目的。

我发现以下作品('redirect'和'proxy'在这里可以互换):

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

然而,以下导致404('forward'和'passthrough'在这里可以互换):

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

整个规则如下:

      <!-- 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>

我的一些初步问题(可能会出现更多问题):

  1. 'proxy'/'redirect'和'forward'/'passthrough'之间是否存在这样的差异,是否需要实现更专业的实现有意义重定向的工作?
  2. 我是否遗漏了其他配置文件中可能影响这些重定向尝试结果的内容?
  3. 编辑:RegEx的不同之处在于我试图查看是否可能出现断开连接的地方

1 个答案:

答案 0 :(得分:1)

因为dotCMS中的url确实不存在,所以前向规则使用的servlet requestdispatcher不起作用。您需要设置一个请求属性CMS_FILTER_URLMAP_OVERRIDE,dotCMS将尊重该属性。在代码中,这看起来像:

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