2009-10-26 12 views
1

Je veux m'assurer que tous mes flatpages ont le sous-domaine www et rediriger vers ceux-ci s'ils ne le font pas.django flatpage redirections

J'ai regardé quelques logiciels intermédiaires qui redirigent vers www, mais (1), ils redirigent généralement toutes les URL vers www et (2), ceux que j'ai trouvés ne fonctionnent pas avec les flatpages.

Je ne souhaite pas que toutes les URL de mon site soient redirigées pour inclure le sous-domaine www, uniquement les pages Web.

Quelqu'un sait comment je devrais y arriver?

Répondre

0

Une option consiste à modifier un middleware, afin qu'il redirige uniquement si response.status_code == 404. Placez le middleware juste avant le middleware flatpage dans settings.py. Ceci rediriger

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

mais aussi

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

avant de renvoyer une erreur 404. Une autre option serait d'écrire votre propre middleware flatpage basé sur le middleware officiel. Vous pouvez voir le code de la classe FlatpageFallbackMiddleware sur le django website.

Dans l'essai, sauf le bloc, vérifiez s'il existe une page flat. Puis redirigez si nécessaire. Si vous ne redirigez pas, renvoyez la page flat.

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

    # Code to redirect to www goes here 

    return fp 
except Http404: 
... 
0

Dans votre fichier urls.py faire quelque chose comme ceci:

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

-1: Cela crée une redirection infinie. 'mysite.com/flat/page' ->' www.mysite.com/flat/page' -> 'www.mysite.com/flat/page' -> ... – Alasdair