Мика,
Это не то, что PrettyFaces поддерживает использование конструкции отображения URL, вместо этого вы должны использовать пользовательское правило перезаписи:
<rewrite match="/(.*)" substitute="/faces/$1.xhtml" />
Однако учтите влияние такого правила (аналогично тому, которое вы определили выше.) Конечно, будет бесконечный цикл, потому что "*" также соответствует "/faces/XXX.xhtml". Вы должны сделать свой шаблон соответствия более строгим.
<rewrite match="^/(.*)(?<!\.xhtml)$" substitute="/faces/$1.xhtml" />
Я также предлагаю вам прочитать Регулярные выражения, потому что "/ *" не является регулярным выражением, которое будет делать то, что, как вы думаете, будет: http://ocpsoft.com/opensource/guide-to-regular-expressions-in-java-part-2/#lookaround
Однако, если вам нужен инструмент для перезаписи URL, который был специально разработан для выполнения подобных задач, то я предлагаю вам взглянуть на OCPsoft Rewrite: http://ocpsoft.com/rewrite/, гораздо более мощный (но более сложный в использовании) URL инструмент для перезаписи.
Это позволяет вам делать такие вещи:
.addRule(Join.path("/{page}")
.to("/pages/{page}.xhtml")
.when(Resource.exists("/pages/{page}.xhtml"))
.where("page").matches("(?!RES_NOT_FOUND)[^/]+"))