django - 多语言 django cms 站点 : seo friendlier home pages (redirects)

标签 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。

最佳答案

如果你把你的 Index url 放在 root conf 中,而你的所有其他页面都放在 i18n_patterns 下会怎么样?

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

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

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

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

  • 如果您使用有限的固定语言,您可以在您的网络服务器配置文件(或您的 Django 网址)中对重定向进行硬编码。
  • 如果您不想对这些重定向进行硬编码,也许在您的 i18n_patterns 中包含您的 Index View 也可以达到目的

类似于:

# 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')),
)

编辑:

另一种选择是使用您自己的 LocaleMiddleware,方法是将 django 中的那个子类化。 重定向部分似乎发生在这里:https://github.com/django/django/blob/master/django/middleware/locale.py#L29

关于django - 多语言 django cms 站点 : seo friendlier home pages (redirects),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33753630/

相关文章:

apache - 使用 htaccess 进行多域重定向

django-cms - django cms 看不到静态文件夹

python - SignatureDoesNotMatch - Boto3 Django 存储

python - 如何修复 Django Translation ASCII 解码错误?

ruby-on-rails - 这是如何发送到 Show 操作的

PHP 重定向速度慢;花费很长时间

django - 如何在基于 django 的网站上使用 wordpress 博客主题

javascript - json.dump 未将 python 列表转换为 JS 数组

使用 pdb 时 Django UnicodeDecodeError