6

Normally i would do it with .htaccess but django doesn't have it.

So what is the best way and what is the code for it to redirect from www.olddomain.com to www.newdomain.com?

NOTE: we are not using Apache, but Gunicorn

thanx!

4

7 回答 7

6

最好的方法仍然是使用您的 Web 服务器而不是 Django。这将比使用 Django 更快、更高效。

查看此问题以获取更多信息。

更新

如果您真的想在 django 中执行此操作,请编辑您的 url conf 文件(管理django 的 url 调度程序)以在顶部包含以下内容 -

from django.views.generic.simple import redirect_to

urlpatterns = patterns('',   
    (r'^.*$', redirect_to, {'url': 'http://www.newdomain.com'}),
)

有关更多信息,请查看文档

于 2013-02-07T13:53:20.830 回答
3
import urlparse
from django.http import HttpResponseRedirect

domain = request.GET['domain'] 
destination = reverse('variable_response',args=['Successful'])
full_address = urlparse.urljoin(domain, destination)
return HttpResponseRedirect(full_address)
于 2013-02-07T13:40:10.157 回答
1

我遇到了同样的问题,所以我写了这个,它对我来说非常有效,也许其他人也需要它:

urlpatterns += [  # redirect to media server with same path
url(r'^media/', redirectMedia),
]

并使用此功能重定向:

from urllib.request import urlopen
from django.http import HttpResponse
def redirectMedia(request):
    x = urlopen("http://www.newdomain.com" + request.path)
    return HttpResponse(x.read())

好好享受!

于 2018-05-25T13:33:29.287 回答
1

对于 Django >= 2.0,更简单的解决方案是使用RedirectView

例如在urls.py

from django.views.generic.base import RedirectView

urlpatterns = [
    path('my_ext_uri', RedirectView.as_view(url='https://YOUR_EXTERNAL_URL')),
]

[边注]

正如 Aidan 的回答中提到的,最好重定向将由 Web 服务器网关上的不同服务处理的请求,而不是在(Python/Django)应用程序服务器上。

于 2021-02-02T04:43:42.447 回答
0

我最终使用 heroku 并旋转了 1 个网络测功机(这是免费的)。

#views.py
def redirect(request):
    return render_to_response('redirect.html')

#redirect.html
<html>
<head>
<title>Blah</title>
<meta http-equiv="refresh" content="1;url=http://www.example.com">
</head>
<body>
<p>
Redirecting to our main site. If you're not redirected within a couple of seconds, click here:<br />
<a href="http://www.example.com">example.com</a>
</p>
</body>
</html>

就那么简单。可以在此处找到相同的示例。

于 2013-02-07T14:56:54.650 回答
0

更新到 Python 3 的凯瑟琳答案的替代方案是:

from django.contrib.sites.shortcuts import get_current_site
from urllib.parse import urljoin
from django.http import HttpResponseRedirect

NEW_DOMAIN = 'www.newdomain.com'

放入每个view

def myView(request, my_id):
    if request.META['HTTP_HOST'] != NEW_DOMAIN:
        # remove the args if not needed
        destination = reverse('url_tag', args=[my_id])
        full_address = urljoin(DOMAIN, str(destination))
        return HttpResponseRedirect(full_address)
    # your view here        

url_tag是 中定义的urlpatterns

于 2016-09-28T14:59:57.540 回答
0

我以简单的解决方案结束:

return HttpResponse(f"<script>location.replace('https://example.com/');</script>")

如果用户不禁用 webbrowser 中的脚本,它会起作用

于 2021-11-03T21:39:48.160 回答