多语种django cms网站:seo更友好的主页(重定向)

时间:2015-11-17 09:43:46

标签: django redirect django-cms multilingual

注意/编辑:据我所知,默认行为是明智的SEO(允许一个重定向...多个不好)。所以这有点矫枉过正。

如果我的django-cms网站使用多种语言,则访问domain.com始终会重定向到domain.com/default-language/

是否有一种首选的方式/包可以消除这种行为?

我想要它的原因主要是因为SEO。最佳解决方案是:
domain.com =>没有重定向
domain.com/default-lang/ =>重定向回domain.com
domain.com/other-lang/ =>保持原样,因为有翻译的内容

示例: http://www.parkhotel-bellevue.ch/重定向到http://www.parkhotel-bellevue.ch/de/,这是我不想要的。 http://www.parkhotel-bellevue.ch现在正确执行。

注意:这个问题是关于django-cms,而不仅仅是django。

1 个答案:

答案 0 :(得分:1)

如果您将Index网址放在root conf中,将所有其他网页放在i18n_patterns下,该怎么办?

urlpatterns = [
    url(r'^$', Index.as_view(), name='index'),
]

urlpatterns += i18n_patterns('',
    url(r'^', include('cms.urls')),
)

这样,您的根网址就不会重定向到特定于语言的网址。

对于问题的第二部分,您可以尝试以下解决方案:

  • 如果您使用的是有限的固定语言集,则可以在网络服务器conf(或django网址)中对重定向进行硬编码。
  • 如果您不想对这些重定向进行硬编码,可能在您的Index中加入i18n_patterns视图也可以做到这一点

类似的东西:

# views.py
class Index(View):
    def dispatch(self, request, *args, **kwargs):
        if request.path != '/':
            return redirect('/')
        return super().dispatch(request, *args, **kwargs)

# urls.py
urlpatterns = [
    url(r'^$', Index.as_view(), name='index'),
]

urlpatterns += i18n_patterns('',
    url(r'^$', Index.as_view(), name='index'),
    url(r'^', include('cms.urls')),
)

编辑:

另一个选择可能是通过继承django中的那个来使用你自己的LocaleMiddleware。 重定向部分似乎发生在这里:https://github.com/django/django/blob/master/django/middleware/locale.py#L29