Python 使用apache和mod#u wsgi提供静态文件,而不更改apache';什么样的配置?
我有一个Django应用程序,并且我正在使用一个共享服务器托管,因此我无法更改apache的配置文件。我唯一可以更改的是应用程序中的.htaccess文件。我还有一个标准的django.wsgi python文件作为入口点 在dev环境中,我使用Django为静态文件提供服务,但官方文档不鼓励使用Django,说应该使用web服务器Python 使用apache和mod#u wsgi提供静态文件,而不更改apache';什么样的配置?,python,django,apache,.htaccess,mod-wsgi,Python,Django,Apache,.htaccess,Mod Wsgi,我有一个Django应用程序,并且我正在使用一个共享服务器托管,因此我无法更改apache的配置文件。我唯一可以更改的是应用程序中的.htaccess文件。我还有一个标准的django.wsgi python文件作为入口点 在dev环境中,我使用Django为静态文件提供服务,但官方文档不鼓励使用Django,说应该使用web服务器 有没有一种方法可以通过apache提供静态文件,而不必访问apache的配置,只更改.htaccess或django.wsgi文件???从不同的虚拟主机提供静态文件
有没有一种方法可以通过apache提供静态文件,而不必访问apache的配置,只更改.htaccess或django.wsgi文件???从不同的虚拟主机提供静态文件。第一步是添加
AddHandler wsgi-script .wsgi
到您的.htaccess文件,而无需将wsgi建立为处理程序。这将向django.wsgi和django.wsgi/which发出请求,并进入django应用程序
要使django.wsgi成为URL的一部分,您需要使用mod_rewrite。希望您的主机已启用它。例如
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /django.wsgi/$1 [QSA,PT,L]
如果URL与文件匹配,它将为文件提供服务;如果URL与文件不匹配,它将由django提供服务。另一个选择是
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^/?static/
RewriteRule ^(.*)$ /django.wsgi/$1 [QSA,PT,L]
要请求/static/*,请转到文件本身,并通过django访问其他所有内容
然后需要从生成的URL中隐藏django.wsgi。这可以通过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)
如果这不完全正确,那么一定要咨询。我从那里提取了答案的大部分细节,但只是一步一步地将正确的部分组合在一起。您是否错过了这个:似乎很清楚。