将Django站点移动到另一个服务器 - WSGIScriptAlias导致问题

时间:2012-06-13 15:40:07

标签: django apache mod-wsgi django-wsgi

我正在将django网站移动到新服务器上。在旧服务器上,django站点的访问方式与mysite.com/类似,但现在,我们希望通过mysite.com/mysite访问它,并让mysite.com处理其他内容。我对apache进行了以下更改:

    WSGIDaemonProcess mysite processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup mysite
    WSGIScriptAlias /mysite /srv/www/django.wsgi
    #WSGIScriptAlias /mysite /srv/www/django.wsgi  #previous config         

    <Directory /srv/www/mysite/mysite >
            Order allow,deny
            Allow from all
    </Directory>

    Alias /site_media "/srv/www/mysite/site_media/"
    Alias /admin_media "/srv/www/mysite/admin_media/"

这似乎可以很好地指向浏览器mysite.com/unity/admin允许我正确访问管理页面,并查看相应的应用程序是否正确。但是,任何使用自定义模板的东西似乎都是半生不熟的。例如,下面的模板中有一个条目,如下所示:

 {% ifcodable cl.model %}<li><a href="/report/{{ app_label }}/{{ cl.opts.verbose_name }}" class="link">Coding Report</a></li>{% endifcodable %}

这会将页面重定向到

http://mysite.com/report/texas/texas

相反
http://mysite.com/mysite/report/texas/texas

我不确定模板是否设置不正确或是否与新别名有关。我的urls.py看起来像这样:

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    .....
    (r'^report/([a-zA-Z]+?)/([a-zA-Z]+?)/(overall|\d+)/{0,1}$', 'mysite.k.views.performance'),
    (r'^report/(.+?)/(.+?)/{0,1}$', 'mysite.k.views.report'),
    .....

我的django.wsgi文件如下所示:

import os,sys
sys.path.append('/srv/www/mysite')
sys.path.append('/srv/www/mysite/mysite')
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我不知道纠正问题应该做些什么。我对django很新,所以如果有一个邪恶的简单解决方案我道歉。任何建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

问题是您的网址以href属性中的/report开头。以/开头意味着它应该相对于域的根目录。我相信你需要改变的是如何配置Django站点框架,看起来this question有答案。

此外,您应该在模板中使用url tag,而不是在锚标记中对网址进行硬编码。