You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pretty-config.xml未映射的URI返回404错误?

没问题,要实现你想要的效果——让未在pretty-config.xml里映射的URI(包括直接访问/faces/*这类JSF原始路径)返回404错误,你只需要对现有配置做两处修改,具体如下:

1. 拦截直接访问/faces/*的请求

添加一条Rewrite规则,直接拦截所有以/faces/开头的请求并返回404状态码。这样用户输入myapp.com/faces/login.xhtml这类路径时,会被直接拦截返回404。

2. 添加通配符映射捕获未匹配请求

在配置的最后添加一个通配符URL映射,用来捕获所有没被前面规则匹配到的请求,返回自定义404页面的同时发送404状态码。注意这个映射必须放在所有其他映射之后,因为PrettyFaces是按顺序匹配规则的,提前放会覆盖正常的映射。

修改后的完整配置

<?xml version="1.0" encoding="UTF-8"?>
<pretty-config xmlns="http://ocpsoft.org/schema/rewrite-config-prettyfaces"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ocpsoft.org/schema/rewrite-config-prettyfaces 
                                   http://ocpsoft.org/xml/ns/rewrite-config-prettyfaces.xsd">

    <!-- 保留你原有的映射规则 -->
    <url-mapping id="landing">
        <pattern value="/" />
        <view-id value="/faces/index.xhtml" />
    </url-mapping>

    <url-mapping id="login">
        <pattern value="/login" />
        <view-id value="/faces/login.xhtml" />
    </url-mapping>

    <!-- 拦截所有直接访问/faces/开头的请求 -->
    <rewrite match="^/faces/.+" send-status="404"/>

    <!-- 捕获所有未匹配的请求,返回自定义404页面 -->
    <url-mapping id="404">
        <pattern value="/*"/>
        <view-id value="/faces/404.xhtml"/>
        <send-status code="404"/>
    </url-mapping>

</pretty-config>

补充说明

  • 你需要在/faces目录下创建404.xhtml作为自定义错误页面,如果不需要自定义页面,也可以用更简洁的规则直接返回空白404响应:
    <rewrite match="^.*$" send-status="404"/>
    
    但自定义页面能带来更好的用户体验。
  • 注意修正schemaLocation的完整路径,确保XML解析器能正确识别配置语法(你之前的配置里这个路径不完整)。
  • 规则顺序至关重要:具体的业务映射要放在前面,通用的拦截和404规则放在最后,避免正常请求被错误拦截。

内容的提问来源于stack exchange,提问作者nimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:30:01