Redirect 漂亮面孔重定向循环
嗨,我在Tomcat7中使用了漂亮的面孔3.3.3 这个配置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>
<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文件中,但现在可以在RewriteConfigurationProvider
中更安全地定义更多自定义重写规则:
<!-- 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("^.*[^/]$");
}
}