Rails路由重定向问题:旧Coldfusion带.cfm的链接无法跳转
Rails路由匹配失败原因分析
核心问题:路由匹配规则不包含URL参数
Rails的get路由仅匹配URL的路径部分,?及后面的查询参数会被完全忽略。你写的"/example-products/index.cfm?cid=3"里,?cid=3属于查询参数,Rails实际是在匹配"/example-products/index.cfm"这个路径,但问题出在.cfm后缀上。
为什么.cfm后缀会导致路由失效
多数部署Rails的服务器(比如Nginx、Apache)默认会把.cfm这类特定后缀的请求当成静态资源或ColdFusion专属请求处理:要么直接返回对应文件(如果存在),要么直接拒绝,根本不会把请求转发到Rails的路由系统里,所以你的这条路由规则根本没机会被触发执行。
可行的解决方向
- 调整服务器配置:修改Nginx/Apache的配置,让
.cfm后缀的请求也转发到Rails应用,这样路由才能匹配到"/example-products/index.cfm"路径。 - 修正路由写法:去掉查询参数,只匹配路径部分,若需处理参数可改用动态重定向:
# 基础重定向 get "/example-products/index.cfm", to: redirect(path: "/products") # 根据cid参数动态重定向(如果需要) get "/example-products/index.cfm", to: redirect { |params, request| "/products?category=#{params[:cid]}" }
内容的提问来源于stack exchange,提问作者Tony S.
相关产品推荐
相关产品推荐

