2010-10-20 6 views
1

J'ai une application Django, et j'utilise un hébergement de serveur partagé, donc je ne peux pas changer les fichiers de configuration d'apache. La seule chose que je peux changer est le fichier .htaccess dans mon application. J'ai aussi un fichier python django.wsgi standard, comme point d'entrée. Dans l'environnement de développement, j'utilise Django pour servir les fichiers statiques, mais il est déconseillé dans la documentation officielle, disant que vous devriez le faire en utilisant le serveur web à la place.Servir des fichiers statiques avec apache et mod_wsgi sans changer la configuration d'apache?

Existe-t-il un moyen de servir des fichiers statiques via apache sans avoir accès à la configuration d'Apache, en changeant uniquement les fichiers .htaccess ou django.wsgi ??

+0

Avez-vous manqué ceci: http://docs.djangoproject.com/fr/dev/howto/static-files/ Semble clair. –

Répondre

1

Servir les fichiers statiques d'un hôte virtuel différent.

2

La première étape consiste à ajouter simplement

AddHandler wsgi-script .wsgi 

à votre fichier .htaccess avec rien d'autre à établir wsgi comme gestionnaire. Cela fera des demandes à django.wsgi et django.wsgi/quoi que ce soit aller à votre application django.

Pour que la partie django.wsgi de l'URL disparaisse, vous devez utiliser mod_rewrite. J'espère que votre hôte l'a activé. Un exemple est

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /django.wsgi/$1 [QSA,PT,L] 

qui servira le fichier si l'URL correspond à un fichier, ou être servi par django si elle ne fonctionne pas. Une autre option serait

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !^/?static/ 
RewriteRule ^(.*)$ /django.wsgi/$1 [QSA,PT,L] 

de faire des demandes pour/statiques/* aller dans le fichier lui-même et tout le reste à passer par django.

Ensuite, vous devrez masquer django.wsgi à partir des URL générées. Cela peut être fait avec un extrait comme celui-ci dans votre django.wsgi

def _application(environ, start_response): 
    # The original application. 
    ... 

import posixpath 

def application(environ, start_response): 
    # Wrapper to set SCRIPT_NAME to actual mount point. 
    environ['SCRIPT_NAME'] = posixpath.dirname(environ['SCRIPT_NAME']) 
    if environ['SCRIPT_NAME'] == '/': 
     environ['SCRIPT_NAME'] = '' 
    return _application(environ, start_response) 

Si cela ne fonctionne pas tout à fait exactement ça, alors assurez-vous de consulter http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines. J'ai tiré la plupart des détails de la réponse à partir de là, mais j'ai juste obtenu les bonnes parties mises en place comme une étape par étape.

Questions connexes