Redirect 漂亮面孔重定向循环

Redirect 漂亮面孔重定向循环,redirect,prettyfaces,trailing-slash,Redirect,Prettyfaces,Trailing Slash,嗨,我在Tomcat7中使用了漂亮的面孔3.3.3 这个配置 <rewrite match="/browse" trailingSlash="append" toCase="lowercase" /> <url-mapping id="browsecategory"> <pattern value="/browse/" /> <view-id value="/browser.xhtml" /> </url-mapping>

嗨,我在Tomcat7中使用了漂亮的面孔3.3.3

这个配置

<rewrite match="/browse" trailingSlash="append" toCase="lowercase" />
<url-mapping id="browsecategory">
    <pattern value="/browse/" />
    <view-id value="/browser.xhtml" />
</url-mapping>
我的浏览器进入重定向循环

编辑:

浏览是否可能是保留关键字?当我用squirrel替换它时,一切都按预期工作:

<rewrite match="/squirrel" trailingSlash="append" toCase="lowercase" />
<url-mapping id="browsecategory">
    <pattern value="/squirrel/" />
    <view-id value="/browser.xhtml" />
</url-mapping>

问题是您的
trailingSlash
重写规则也与
/browse
等规则匹配。你能试着这样调整它吗:

<rewrite match="^/browse$" trailingSlash="append" toCase="lowercase" />


我认为这应该行得通,因为规则现在只会精确地匹配
/browse
,而不会匹配
/browse

,因为在PrettyFaces中使用
标记会产生大量混乱,我们已经迁移到PrettyFaces的新核心架构(//Rewrite 2.0.0.Final)这提供了对应用程序配置更大的控制。(此处提供)

如果你的环境允许的话,我建议你试试漂亮脸4。如果愿意,可以将URL映射保留在pretty-config.xml文件中,但现在可以在Rewrite
ConfigurationProvider
中更安全地定义更多自定义重写规则:

<!-- for JSF 2.x -->
<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-servlet</artifactId>
    <version>2.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-config-prettyfaces</artifactId>
    <version>2.0.0.Final</version>
</dependency>
别忘了

此外,您还可以在此配置文件中进行URL映射,从而消除对pretty-config.xml或PrettyFaces 4 con:

public class RewriteConfig extends HttpConfigurationProvider
{
   @Override
   public int priority()
   {
     return 10;
   }

   @Override
   public Configuration getConfiguration(final ServletContext context)
   {
     return ConfigurationBuilder.begin()

       .addRule(Join.path("/browse/").to("/browser.xhtml"))

       .addRule()
         .when(Direction.isInbound().and(Path.matches("/{p}")))
         .perform(Redirect.to(context.getContextRoot() + "/{p}/"))
         .where("p").matches("^.*[^/]$");
    }
}

我没有在
matches()
子句中测试正则表达式,但它应该是这样的。我希望这有帮助

谢谢,我试过了,但仍然让我感到惊讶,我发现情况会是这样。您是否完全重新部署了应用程序?是的=(你有一个可以尝试的小项目吗?我现在没有。我可以设置一个,但可以休息一下。如果你去支持论坛,你可以上传一个复制这个的示例项目,我明天会看一看:谢谢,maven有版本4吗?我可以找到3.3.3,顺便问一下,你有没有我想要的dea为什么不能使用3.3.3?我的配置有误吗?或者可能与spring或primefaces有冲突吗?ps:我使用servlet 3,但我的web中没有配置。抱歉。是的。Maven中有版本4-只需按照这里的说明操作:你能给我一个更准确的链接吗?默认的Maven存储库不包含版本4抱歉他很困惑,PrettyFaces 4是重写2.0.0-嗨!我面临着类似的问题。在重定向循环过程中会发生什么?在我的例子中,浏览器在停止之前多次附加/index.jsp。
<url-mapping id="browsecategory">
    <pattern value="/browse/" />
    <view-id value="/browser.xhtml" />
</url-mapping>
public class RewriteConfig extends HttpConfigurationProvider
{
   @Override
   public int priority()
   {
     return 10;
   }

   @Override
   public Configuration getConfiguration(final ServletContext context)
   {
     return ConfigurationBuilder.begin()
       .addRule()
         .when(Direction.isInbound().and(Path.matches("/{p}")))
         .perform(Redirect.to(context.getContextRoot() + "/{p}/"))
         .where("p").matches("^.*[^/]$");
    }
}
public class RewriteConfig extends HttpConfigurationProvider
{
   @Override
   public int priority()
   {
     return 10;
   }

   @Override
   public Configuration getConfiguration(final ServletContext context)
   {
     return ConfigurationBuilder.begin()

       .addRule(Join.path("/browse/").to("/browser.xhtml"))

       .addRule()
         .when(Direction.isInbound().and(Path.matches("/{p}")))
         .perform(Redirect.to(context.getContextRoot() + "/{p}/"))
         .where("p").matches("^.*[^/]$");
    }
}