Django重定向丢失了WSGIScriptAlias url的一部分

时间:2011-08-24 14:44:38

标签: django url redirect mod-wsgi

我有一个django应用程序设置主要使用管理界面和我自己的一些视图。一切都在我本地机器上的开发服务器上正常工作。

但是在生产服务器上,使用Apache和mod_wsgi,当我在其中一个视图中发出重定向语句时,它会弄乱URL。而不是去

     www.hostname.com/wsgi/django/admin/myapp/myform.html

它转到

     www.hostname.com/admin/myapp/myform.html

Apache无法识别管理文件夹下的任何内容,因此出现错误。

所以在我的apache配置中,我有以下内容,因此wsgi / django下的任何内容都会被发送到我的应用程序:

WSGIScriptAlias /wsgi/django /project/production/public/wsgi/django_eclipse/myapp.wsgi

在我有问题的观点中,我有以下内容:

return redirect('/admin/sequencing/load_flowcell?' + params )      

如果我将重定向更改为包含'/ wsgi / django'部分,我可以完成这项工作,但这意味着我不能保持我的开发服务器上的那个相同。在Django设置中有没有办法,或http.conf设置这个,以便我的重定向自动包含这部分URL?

3 个答案:

答案 0 :(得分:0)

Django可以在撤消时使用sites framework生成正确的网址 - 如果您更改与您的网站相关联的domain行中的Site字段(由{{1}指示在你的SITE_ID)到settings.py,然后一切都应该正常。

(可能还有一些地方有普通网址,例如http://www.hostname.com/wsgi/adminLOGIN_URL设置,您应该确保包含LOGIN_REDIRECT_URL部分。)

答案 1 :(得分:0)

好吧,它正在重定向到你告诉它的网址。

这就是为什么你不应该在Django的任何地方硬编码URL。如果您使用了URL反转功能,它将自动添加WSGI前缀 - 它已经知道它,并在您使用{% url %}标记或{{1时将其考虑在内功能。

在urls.py中为URL指定一个名称,并在调用重定向而不是URL中使用该名称,并且所有这些都应该正常工作。无需更多设置。

答案 2 :(得分:-1)

编辑:REAL FIX

from django.core.urlresolvers import reverse, get_script_prefix
....
#only of you absolutely HAVE to have a hardcoded url
return redirect(get_script_prefix()+'admin/sequencing/load_flowcell?'+params )
#better!
return redirect(reverse('admin:index')+sequencing/load_flowcell?'+params )

CAVEAT: https://docs.djangoproject.com/en/dev/howto/deployment/modpython/#basic-configuration

<Location "/mysite/">
    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonOption django.root /mysite     <---- Make sure you have this
    PythonDebug On
</Location>