如何在Sulu.io项目中移除默认语言的URL区域前缀
解决Sulu.io默认语言URL不带前缀的配置问题
你遇到的核心问题是:明明配置了默认法语的URL不带语言前缀,但所有请求还是被重定向到带/fr的路径,没法实现{host}/mon-article(法语)和{host}/en/my-article(英语)的预期URL结构。
你的现有配置里,默认语言的URL规则没有被优先匹配,导致Sulu走了通用的带语言前缀的规则。下面是具体的解决方法:
正确的URL配置方案
修改你的环境URL配置,把默认语言的规则放在最前面(Sulu会按顺序匹配规则,优先命中第一条符合的):
<environment type="dev"> <urls> <!-- 优先匹配默认语言,不带前缀 --> <url language="fr">{host}</url> <!-- 非默认语言使用带前缀的规则 --> <url language="en">{host}/en</url> </urls> </environment>
如果你想保留通用规则(比如后续新增语言时不用逐个配置),也可以这样写,同样要保证默认语言规则在最上方:
<environment type="dev"> <urls> <url language="fr">{host}</url> <url>{host}/{localization}</url> </urls> </environment>
为什么原配置不生效?
你原来的配置中,虽然写了默认语言的URL规则,但因为通用规则{host}/{localization}的匹配优先级问题,Sulu还是默认给所有请求加上了语言前缀。把默认语言的规则放在最顶部,就能确保法语请求直接命中不带前缀的URL,不会被重定向到/fr路径。
验证配置生效的步骤
- 清除Sulu缓存,确保新配置生效:
bin/console cache:clear --env=dev - 测试访问
{host}/mon-article,应该直接加载法语页面,无重定向; - 测试访问
{host}/en/my-article,正常加载英语页面。
内容的提问来源于stack exchange,提问作者Tib
相关产品推荐
相关产品推荐

