Grails配置serverURL后注册提交跳转404缺失上下文路径问题求助
解决方案
1. 补充上下文路径(Context Path)核心配置
你当前仅配置了grails.serverURL,缺少上下文路径关联配置,需在grails-app/conf/application.yml的production配置块下新增两项配置:
environments: production: grails: serverURL: http://myUrl:13001/myAppName web: contextPath: /myAppName # Grails层面上下文路径配置 server: servlet: context-path: /myAppName # Spring Boot底层上下文路径配置
配置完成后,框架自动生成的所有跳转地址、资源链接都会统一携带/myAppName前缀,不会出现上下文丢失的问题。
2. 修正跳转逻辑避免硬编码路径
检查注册提交接口的后端跳转逻辑,禁止使用硬编码的绝对路径(如redirect(url: "/")),统一使用Grails原生路由跳转规则:
// 正确写法,框架自动拼接上下文路径 redirect controller: 'login', action: 'index' // 带uri的适配写法 redirect uri: '/'
前端页面的表单、跳转链接也不要硬写路径前缀,使用Grails标签库生成地址:
<g:form controller="register" action="submit"> <!-- 禁止写 <form action="/register/submit"> 这类硬编码路径 -->
3. 适配安全框架配置(如使用Spring Security)
如果项目使用Spring Security做权限控制,需要补充安全框架的跳转适配配置,确保登录、注册成功后的跳转地址自动携带上下文前缀:
grails: plugin: springsecurity: successHandler: defaultTargetUrl: / alwaysUseDefaultTargetUrl: true logout: afterLogoutUrl: /login/index
4. War包部署适配
打War包部署到Tomcat时,需保证Tomcat的应用上下文和配置的/myAppName一致:
- 不要将War包命名为
ROOT.war,需命名为myAppName.war,Tomcat会自动以文件名作为上下文路径 - 如需自定义上下文,可在Tomcat的
conf/Catalina/localhost目录下新增myAppName.xml配置文件指定上下文路径
完成上述配置后重新启动/打包部署即可解决跳转404问题。
内容的提问来源于stack exchange,提问作者y seok Jeon
相关产品推荐
相关产品推荐

