Odoo V13 website.rewrite配置URL重定向不生效问题咨询
Odoo原生网站重定向规则不生效的解决方法
你用的是Odoo自带的网站重定向模型(website.rewrite),配置后不生效基本都是配置格式错误、路由优先级冲突两个原因,按下面步骤操作就能用原生功能实现需求,不用写自定义模块:
先修正基础配置错误
这个模型对字段格式有明确要求,之前的试错里有几个配置是完全无效的:
- URL FROM 字段只能填相对路径,不能带域名:你之前尝试填带完整域名的源地址是错的,必须以
/开头,只写路径部分,也就是你最开始填的/event/stage-test-online-2023-02-21-2023-02-23-1990/register格式才是符合要求的,带域名的规则完全不会被匹配 - 固定路径跳转不要选308 Rewrite模式:这个模式是给动态路由透传用的,只能匹配Odoo已注册的路由通配规则,你要做单条固定路径的301跳转,必须选「301 永久移动」选项
- 站点匹配要准确:规则里选的站点是eyme-yoga,要确认你访问旧URL时前台切换的就是这个站点,Odoo多站点规则是隔离的,A站的重定向不会在B站生效
解决路由优先级冲突(90%的配置正确但不生效都是这个原因)
你要跳转的事件注册路径/event/xxx/register是Odoo事件模块提前注册的动态路由,默认优先级比你手动加的静态重定向规则高。如果旧路径对应的事件已经被删除/不存在,请求会先被事件模块的控制器捕获,直接返回404,根本轮不到重定向规则执行。
原生功能操作步骤:
- 开启Odoo开发者模式,进入网站模块的「配置-技术-路由」菜单
- 找到路径为
/event/<model("event.event"):event>/register的内置路由记录 - 编辑这条记录,把优先级数值改大(默认一般是10,改成99即可,数值越大路由匹配优先级越低)
- 保存后清空Odoo全局缓存,自部署实例可以顺手重启下服务,再访问旧URL测试
这个调整不会影响正常事件的访问,只是把静态重定向规则的匹配顺序提前,只要你配置的旧路径对应不存在的事件,就不会和正常业务路由冲突。
最后补全规则细节
回到你创建的重定向规则编辑页,再核对两个配置:
- 如果旧URL可能带查询参数(比如推广参数、来源参数),把匹配模式从「精确匹配」改成「前缀匹配」,跳转时会自动把原参数带到新路径上
- 确认规则处于激活状态,没有被归档
- URL FROM 末尾不要加多余的斜杠,和实际访问的路径字符完全一致
你之前写的自定义控制器能生效,本质就是因为自定义路由的默认优先级比内置事件路由高,先捕获到请求再做跳转,和上面调整内置路由优先级让重定向规则先匹配的逻辑完全一致,用原生功能不需要额外开发。
内容的提问来源于stack exchange,提问作者Ahrimann Steiner
相关产品推荐
相关产品推荐

