在Apache目录布局上部署Django

在Apache目录布局上部署Django,django,apache,virtualhost,Django,Apache,Virtualhost,我有一个Django应用程序,其目录结构如下 /myapp/ /login/ /myapp_settings/ /subapp1/ /supapp2/ manage.py位于myapp目录中 在项目的url.py中,我有如下url设置: urlpatterns = patterns('', url(r'^subapp1/', include('subapp1.urls')), url(r'^xhr/', include('subapp1.urls')),

我有一个Django应用程序,其目录结构如下

/myapp/
   /login/
   /myapp_settings/
   /subapp1/
   /supapp2/
manage.py
位于
myapp
目录中

在项目的
url.py
中,我有如下url设置:

urlpatterns = patterns('',
    url(r'^subapp1/', include('subapp1.urls')),
    url(r'^xhr/', include('subapp1.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^subapp2/', include('smart_selects.urls')),

        # Login / logout.
    url(r'^login/$', 'django.contrib.auth.views.login'),
    url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/subapp1/'}, name='auth_logout'),
    url(r'^logout/(?P<next_page>.*)/$', 'django.contrib.auth.views.logout', name='auth_logout_next'),
)   
我使用的每个URL模式是否都需要别名和目录配置?如果是这样的话,我怎样才能重做我的URL模式,这样我就不需要这样做了。我不希望在部署应用程序时必须执行所有这些额外的Apache配置

编辑:我按照Reinbach的建议修改了我的
WSGIScriptAlias
。它现在的内容是
WSGIScriptAlias//var/www/django projects/myapp/myapp\u settings/wsgi.py
。然而,这仍然返回404。Apache日志中的错误是

[Fri Sep 07 09:11:00 2012][error][client 192.189.x.x]文件不存在:/var/www/html/login

WSGIScriptAlias / /var/www/django-projects/myapp/myapp_settings/wsgi.py
请注意,它在
/var/www/html
(默认Apache根目录)中查找,而不是
/var/www/django项目

EDIT2:我正在附加此部分的VirtualHost块

WSGIPythonPath /var/www/django-projects/myapp
<VirtualHost sub.example.com:80>
     DocumentRoot /var/www/django-projects/myapp
     ServerName sub.example.com
     WSGIScriptAlias / /var/www/django-projects/myapp/myapp_settings/wsgi.py


     Alias /robots.txt /var/www/django-projects/myapp/static/robots.txt
     Alias /favicon.ico /var/www/django-projects/myapp/static/favicon.ico
     AliasMatch ^/([^/]*\.css) /var/www/django-projects/myapp/static/css/$1
     AliasMatch ^/([^/]*\.js) /var/www/django-projects/myapp/static/js/$1
     AliasMatch ^/([^/]*\.png) /var/www/django-projects/myapp/static/images/$1
     AliasMatch ^/([^/]*\.swf) /var/www/django-projects/myapp/static/swf/$1


     Alias /media/ /var/www/django-projects/myapp/media/
     Alias /static/ /var/www/django-projects/myapp/static/

     <Directory /var/www/django-projects/myapp/static>
         Order deny,allow
         Allow from all
     </Directory>
     <Directory /var/www/django-projects/myapp/media>
         Order deny,allow
         Allow from all
     </Directory>
     <Directory /var/www/django-projects/myapp/myapp_settings/>
         <Files wsgi.py>
              Order deny,allow
              Allow from all
         </Files>
     </Directory>
</VirtualHost>
WSGIPythonPath/var/www/django projects/myapp
DocumentRoot/var/www/django projects/myapp
ServerName sub.example.com
WSGIScriptAlias//var/www/django projects/myapp/myapp\u settings/wsgi.py
Alias/robots.txt/var/www/django projects/myapp/static/robots.txt
别名/favicon.ico/var/www/django projects/myapp/static/favicon.ico
别名匹配^/([^/]*\.css)/var/www/django projects/myapp/static/css/$1
别名匹配^/([^/]*\.js)/var/www/django projects/myapp/static/js/$1
别名匹配^/([^/]*\.png)/var/www/django projects/myapp/static/images/$1
别名匹配^/([^/]*\.swf)/var/www/django projects/myapp/static/swf/$1
别名/media//var/www/django projects/myapp/media/
别名/static//var/www/django projects/myapp/static/
命令拒绝,允许
通融
命令拒绝,允许
通融
命令拒绝,允许
通融

我相信您希望更改WSGIScriptAlias,因为您当前希望它能够处理
example.com/myapp/login
,而您的示例显示您正在尝试使用
example.com/login

WSGIScriptAlias / /var/www/django-projects/myapp/myapp_settings/wsgi.py

请参见

我相信您希望更改WSGIScriptAlias,因为您当前希望它能够处理
example.com/myapp/login
,而您的示例显示您正在尝试使用
example.com/login

WSGIScriptAlias / /var/www/django-projects/myapp/myapp_settings/wsgi.py

参见

长话短说

由于Apache2.4.x不推荐使用Allow和Deny,请改用Require all-grated(或denied)

长话短说

我在尝试用Apache和mod_wsgi设置Django时遇到了同样的问题。我不完全确定为什么会发生这种情况,但当我在httpd.conf中注释掉以下几行时

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#
#<Directory />
#    AllowOverride none
#    Require all denied
#</Directory>
然而,这只是一个尝试和错误的解决方案,我可以想出。我没有深刻理解为什么它会起作用,但“命令和允许”却不起作用


p.p.p.S哦,现在我知道了。自从Apache 2.4.x以来,不推荐使用Allow和Deny。可以找到好答案。

长话短说

由于Apache2.4.x不推荐使用Allow和Deny,请改用Require all-grated(或denied)

长话短说

我在尝试用Apache和mod_wsgi设置Django时遇到了同样的问题。我不完全确定为什么会发生这种情况,但当我在httpd.conf中注释掉以下几行时

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.
#
#<Directory />
#    AllowOverride none
#    Require all denied
#</Directory>
然而,这只是一个尝试和错误的解决方案,我可以想出。我没有深刻理解为什么它会起作用,但“命令和允许”却不起作用


p.p.p.S哦,现在我知道了。自从Apache 2.4.x以来,不推荐使用Allow和Deny。可以找到很好的答案。

您需要为此应用程序定义虚拟主机,然后设置“DocumentRoot/var/www/django projects/myapp”。您需要为此应用程序定义虚拟主机,然后设置“DocumentRoot/var/www/django projects/myapp”