次のディレクトリ構造を持つ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'),
)
開発にデプロイするrunserver
と、すべてが正しくリンクおよびロードされます。ディレクトリ全体をApacheのDjangoルートにデプロイするとmyapp
、期待どおりにリンクされていないことがわかります。
たとえば、にリンクするとexample.com/login/
、Apache 404が表示されます。これは、特定のディレクトリに対して仮想ディレクトリ構成が定義されていないためだと思います。
アプリケーション用にApacheで次の設定を行っています。
WSGIScriptAlias /myapp /var/www/django-projects/myapp/myapp_settings/wsgi.py
WSGIPythonPath /var/www/django-projects/myapp
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>
使用するURLパターンごとにエイリアスとディレクトリの構成が必要ですか?もしそうなら、どうすればURLパターンをやり直して、これを行う必要がないようにできますか。アプリケーションをデプロイするときに、この余分なApache構成をすべて行う必要はありません。
編集:WSGIScriptAlias
私はラインバッハの提案に従って自分を修正しました。を読み取りますWSGIScriptAlias / /var/www/django-projects/myapp/myapp_settings/wsgi.py
。ただし、これでも404が返されます。Apacheログのエラーには
[Fri Sep 07 09:11:00 2012] [error] [client 192.189.x.x] File does not exist: /var/www/html/login
/var/www/html
代わりに(デフォルトのApacheルート)を検索していることに注意してください/var/www/django-projects
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>