Django应用程序应重定向到相同的IP但不同的端口

时间:2017-10-11 23:28:29

标签: django url-redirection

在https端口(443)上运行Django。当用户访问https://hostname/newAPP时,我希望Django重定向到https://hostname:port

我在urls.py中的urlpatterns中尝试了以下行,但无法获得结果。

url(r'^newAPP$', RedirectView.as_view(url=':8000', permanent=True), name='NewApp')

实际上它正在被重定向,但是被错误地形成了网址“https:hostname /:8000”。请注意,“”位于“ / ”之后。

服务器有多个IP /主机名,因此硬编码IP /主机名不是一种选择。

2 个答案:

答案 0 :(得分:1)

在基本urls.py文件中,您可以添加以下内容以创建一个视图,该视图重定向到同一IP上的其他端口。

我尚未对该代码进行广泛的测试,但现在它对我有效。如果有人想到将其可靠地重定向到其他端口,我将不胜感激。

from django.shortcuts import redirect

def get_new_url(request):
    # Specify the port number, you could get this dynamically
    # through a config file or something if you wish
    new_port = '5000'

    # `request.get_host()` gives us {hostname}:{port}
    # we split this by colon to just obtain the hostname
    hostname = request.get_host().split(':')[0]
    # Construct the new url to redirect to
    url = 'http://' + hostname + ':' + new_port + '/'
    return redirect(url)

urlpatterns = [
    # Some other paths
    path('something/', views.some_view, name='something')
    # ...
    # ...

    # Add your redirect
    path('newAPP/', get_new_url, name='newapp'),

]

如果需要,函数get_new_url()可以位于views.py文件中。只需确保将其导入,然后再在urlconf中引用它即可。

答案 1 :(得分:0)

嗯,您的示例无法正常工作,因为您在localhost:2000 /之后重定向,您可以使用以下内容创建一个视图以重定向到另一个域:

在urls.py中

url(r'^newAPP', views.redirect, {'var': 2000}),
url(r'^anotherAPP', views.redirect, {'var': 3000}), #Of course you can use this view for more than one app

并在您的观点中:

def redirect(request, **kwargs):
    return HttpResponseRedirect('https://localhost:%s' % kwargs.get('var'))

如果你不喜欢这种方式,你可以使用服务器。下一个例子是nginx:

server {
    . . .
    server_name example.com www.example.com;

    rewrite ^/newAPP$ https://localhost:2000 permanent;
    rewrite ^/anotherAPP$ https://localhost:3000 permanent;
    . . .
}

有关nginx redirects的更多信息。告诉我,如果这有助于你