Php Symfony使用BeSimple/BESIMPLEI18N路由绑定重复路由转换路由
我正在创建一个多语言网站,并使用Php Symfony使用BeSimple/BESIMPLEI18N路由绑定重复路由转换路由,php,symfony,routing,routes,translation,Php,Symfony,Routing,Routes,Translation,我正在创建一个多语言网站,并使用BeSimple/BeSimpleI18nRoutingBundle进行路线翻译。我的配置中的路由如下所示: about: locales: { en: "/{_locale}/about-us", lt: "/{_locale}/apie-mus" } defaults: { _controller: BaseBundle:Base:about } 然而,在这种情况下,我得到了重复的路由,就像我输入/en/about-us或/lt/about
BeSimple/BeSimpleI18nRoutingBundle
进行路线翻译。我的配置中的路由如下所示:
about:
locales: { en: "/{_locale}/about-us", lt: "/{_locale}/apie-mus" }
defaults: { _controller: BaseBundle:Base:about }
然而,在这种情况下,我得到了重复的路由,就像我输入/en/about-us或/lt/about-us一样,它以两种方式工作。但是在第二种情况下,它应该是404错误,因为lt locale的路由应该是/lt/apie mus,这也可以正常工作
有没有办法解决这个问题?或者有没有更好的翻译路线的方法
然而,在这种情况下,我得到了重复的路线
每种语言有一条路线:
$ app/console router:debug
about.en ANY ANY ANY /{_locale}/about-us
about.lt ANY ANY ANY /{_locale}/apie-mus
当您在URL/lt/about us
上时,UrlMatcher将匹配en版本:
$app/控制台路由器:匹配/lt/关于我们
路由“about.en”匹配
[路由器]路由“about.en”
姓名:about.en
Path/{u locale}/关于我们
路径正则表达式#^/(?P[^/]++)/大约\-us$#s
主持任何
主机正则表达式
计划任何
方法任何
类Symfony\Component\Routing\Route
默认值\u控制器:AppBundle:默认值:索引
_地点:恩
无需定制
选项编译器\u类:Symfony\Component\Routing\RouteCompiler
在这种情况下,本地将是en而不是lt
但我不认为你应该担心,因为访问者访问我们的唯一方式是自己编辑URL。与BeSimple交锋后,我在10分钟内将我的项目切换到JMSI18nRoutingBundle。它运行良好,解决了路由问题。首先:它包含多种前缀模式(带有区域设置),其次它允许翻译每条路由。这让我担心,如果谷歌能够以某种方式索引
/lt/about-us
和/en/about-us
,因为如果生成捆绑包中解释的URL,那么不同URL的内容将是重复的:{path('about',{'locale':'en'}}
谷歌没有理由索引不在你的html中的URL。如果这还不够,你可以生成robots.txt
或网站地图。
$ app/console router:match /lt/about-us
Route "about.en" matches
[router] Route "about.en"
Name about.en
Path /{_locale}/about-us
Path Regex #^/(?P<_locale>[^/]++)/about\-us$#s
Host ANY
Host Regex
Scheme ANY
Method ANY
Class Symfony\Component\Routing\Route
Defaults _controller: AppBundle:Default:index
_locale: en
Requirements NO CUSTOM
Options compiler_class: Symfony\Component\Routing\RouteCompiler