如何让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
相关产品推荐
相关产品推荐

