Django平面页面重定向

1 投票
2 回答
938 浏览
提问于 2025-04-15 15:24

我想确保我所有的静态页面都有 www 这个子域名,如果没有的话就自动跳转到这个子域名。

我查了一些可以跳转到 www 的中间件,但(1)它们通常会把所有的网址都跳转到 www,而(2)我找到的那些中间件对静态页面不管用。

我并不想让整个网站的所有网址都跳转到带有 www 的子域名,只想让静态页面这样做。

有没有人知道我该怎么做呢?

2 个回答

0

在你的urls.py文件中,可以这样做:

urlpatterns = patterns('',
    (r'^flat/(?P<static>.*)$', 'django.views.generic.simple.redirect_to', {'url': 'http://www.mysite.com/flat/%(static)s'}),
    # other stuff
)
0

一种方法是修改一个中间件,这样它只在 response.status_code == 404 的时候进行重定向。把这个中间件放在 settings.py 文件中 flatpage 中间件的前面。这样做会在返回 404 错误之前进行重定向。

http://example.com/flatpage/ -> http://www.example.com/flatpage/

同时也会在返回 404 错误之前进行处理。

http://example.com/invalidurl/ -> http://www.example.com/invalidurl/

另一种方法是根据官方的中间件自己编写一个 flatpage 中间件。你可以在 django 网站上查看 FlatpageFallbackMiddleware 类的代码。

在 try 和 except 代码块中,检查是否存在 flatpage。如果合适的话就进行重定向。如果不进行重定向,就返回 flatpage。

...
try:
    fp = flatpage(request, request.path_info)

    # Code to redirect to www goes here

    return fp
except Http404:
...

撰写回答