Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用apache和mod#u wsgi提供静态文件,而不更改apache';什么样的配置?_Python_Django_Apache_.htaccess_Mod Wsgi - Fatal编程技术网

Python 使用apache和mod#u wsgi提供静态文件,而不更改apache';什么样的配置?

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文件???从不同的虚拟主机提供静态文件

我有一个Django应用程序,并且我正在使用一个共享服务器托管,因此我无法更改apache的配置文件。我唯一可以更改的是应用程序中的.htaccess文件。我还有一个标准的django.wsgi python文件作为入口点

在dev环境中,我使用Django为静态文件提供服务,但官方文档不鼓励使用Django,说应该使用web服务器


有没有一种方法可以通过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)
如果这不完全正确,那么一定要咨询。我从那里提取了答案的大部分细节,但只是一步一步地将正确的部分组合在一起。

您是否错过了这个:似乎很清楚。