多语言 django cms 站点:seo 更友好的主页(重定向)
multilingual django cms site: seo friendlier home pages (redirects)
注意/编辑:据我所知,默认行为是 SEO 明智的(允许一个重定向......多个是不好的)。所以这有点矫枉过正了。
如果我的 django-cms 网站是多语言的,访问 domain.com
总是重定向到 domain.com/default-language/
。
是否有首选 way/package 来消除这种行为?
我想要它的原因主要是因为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。
对于你问题的第二部分,你可以尝试以下解决方案:
- 如果您使用有限的固定语言,您可以在您的网络服务器 conf 中(或在您的 django urls 中)对重定向进行硬编码。
- 如果您不想对这些重定向进行硬编码,也许在您的
i18n_patterns
中包含您的 Index
视图也可以做到这一点
类似于:
# 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
注意/编辑:据我所知,默认行为是 SEO 明智的(允许一个重定向......多个是不好的)。所以这有点矫枉过正了。
如果我的 django-cms 网站是多语言的,访问 domain.com
总是重定向到 domain.com/default-language/
。
是否有首选 way/package 来消除这种行为?
我想要它的原因主要是因为SEO。最佳解决方案是:
domain.com
=> 无重定向
domain.com/default-lang/
=> 重定向回 domain.com
domain.com/other-lang/
=> 保持原样,因为有翻译内容
示例: http://www.parkhotel-bellevue.ch 现在正确执行。http://www.parkhotel-bellevue.ch/
重定向到 http://www.parkhotel-bellevue.ch/de/
,这是我不想要的。
注意:这个问题是关于 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。
对于你问题的第二部分,你可以尝试以下解决方案:
- 如果您使用有限的固定语言,您可以在您的网络服务器 conf 中(或在您的 django urls 中)对重定向进行硬编码。
- 如果您不想对这些重定向进行硬编码,也许在您的
i18n_patterns
中包含您的Index
视图也可以做到这一点
类似于:
# 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