如何在Django下将domain.com重定向到WWW.domain.com?

Jak*_*ake 8 apache django mod-wsgi http-status-code-301

如何在django站点中将301的所有请求重定向到domain.com/...到www .domain.com/...

显然这不能在urls.py中完成,因为你只在那里获得了URL的路径部分.

我不能在.htaccess中使用mod重写,因为.htaccess文件在Django下没有任何作用(我认为).

我猜中间件或apache conf中的东西?

我正在使用mod WSGI在Plesk的Linux服务器上运行Django

Gra*_*ton 18

有人指出的WebFaction讨论对于配置来说是正确的,你只需要自己应用它而不是通过控制面板.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

放入.htaccess文件,或在适当的上下文中的主Apache配置中.如果在主Apache配置中的VirtualHost内部,您将ServerName为www.example.com,ServerAlias为example.com,以确保虚拟主机处理这两个请求.

如果您无权访问任何Apache配置,如果需要,可以使用围绕Django WSGI应用程序入口点的WSGI包装器来完成.就像是:

import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()

def application(environ, start_response):
  if environ['HTTP_HOST'] != 'www.example.com':
    start_response('301 Redirect', [('Location', 'http://www.example.com/'),])
    return []
  return _application(environ, start_response)
Run Code Online (Sandbox Code Playgroud)

修复此问题以在网站中包含URL并处理https是留给读者的练习.:-)


Lup*_*uch 15

PREPEND_WWW设置就是这样做的.

  • 这很有用,但值得注意的是它完全不加区分......如果没有一个www,它总会添加一个www,所以对于一个也可以从不应该以www开头的子域访问的网站,像格雷厄姆的建议变得像必要. (4认同)