通过Apache在/ var / www中与Django一起提供html文件

时间:2011-12-23 06:31:32

标签: python django apache mod-wsgi

我让我的Apache Mod_WSGI和Django在http://blog.stannard.net.au/2010/12/11/installing-django-with-apache-and-mod_wsgi-on-ubuntu-10-04/之后工作,我的000默认网站有内容

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/nipun/webdev/demo/demo

    <Directory /home/nipun/webdev/demo/demo>
    Order allow,deny
    Allow from all


    WSGIDaemonProcess demo.djangoserver processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup demo.djangoserver

    WSGIScriptAlias / /home/nipun/webdev/demo/demo/apache/django.wsgi
    </Directory>



DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>


所以使用这种配置我基本上可以为我的Django网站提供服务 http://localhost/meta例如,meta调用相应的视图

但是现在当我尝试加载index.html(有一些javascript和html代码)放在我的/ var / www上时,它会尝试使用URL匹配  在我使用Apache配置的Django项目的urls.py中指定。

如何修改设置以便我能够在/ var / www下以及localhost上的Django站点上提供脚本

尝试在第一个答案中给出的方法后 所以我添加了这一行

Alias / /var/www

在包含

的行上方
WSGIDaemon...

现在django网站和/ var / www中的文件都不起作用

解决的 将000默认文件更改为:

<VirtualHost *:80>  
ServerAdmin webmaster@localhost
DocumentRoot /var/www
Alias /robots.txt /var/www/robots.txt
Alias /testing.php /var/www/testing.php
Alias /index.html  /var/www/index.html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
DocumentRoot /home/nipun/webdev/demo/demo
WSGIDaemonProcess demo.djangoserver processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup demo.djangoserver
WSGIScriptAlias / /home/nipun/webdev/demo/demo/apache/django.wsgi
<Directory /home/nipun/webdev/demo/demo>
   Order allow,deny
   Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined




</VirtualHost>


为了使它更智能,Alias Matching可以像

AliasMatch /([^/]+).html /home/nipun/webdev/application_layer/$1.html

2 个答案:

答案 0 :(得分:1)

首先,我不知道为什么你一直在谈论'运行'你的HTML文件。这不是一个脚本,即使它有Javascript - 这只是为了客户端。没有什么可以运行的,Apache只需要提供文件。

其次,你显然需要一些方法来区分Django的请求和直接提供的请求。最简单的方法是将一个或另一个放在子目录中 - 将WSGIScriptAlias路径从\更改为my_django_site,或使用普通Alias设置位置你的静态文件。如果您执行后者,则需要将指令放在WSGI部件上方,以便首先匹配。

答案 1 :(得分:1)

阅读以下部分的文档:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#The_Apache_Alias_Directive

使用AddHandler / mod_rewrite / WSGI脚本修复方法,如该部分末尾所述。

使用该方法,如果存在静态文件,那么它将被提供,否则Django实例将充当所有其他URL的后备资源。