繁体   English   中英

使用apache和mod_wsgi提供静态文件而不更改apache的配置?

[英]Serving static files with apache and mod_wsgi without changing apache's configuration?

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

在开发环境中,我使用Django提供静态文件,但官方文档中不建议使用Django,而是应使用Web服务器来进行处理。

有没有一种方法可以通过apache提供静态文件,而无需访问Apache的配置,仅更改.htaccess或django.wsgi文件?

第一步是添加

AddHandler wsgi-script .wsgi

到您的.htaccess文件,无需其他任何操作即可将wsgi建立为处理程序。 这将向django.wsgi和django.wsgi /发出请求,无论该请求进入您的django应用程序。

要使URL的django.wsgi部分消失,您将需要使用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)

如果无法完全正确解决此问题,请务必参考http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines 我从那里拉出了答案的大部分细节,但只是一步步地把正确的部分放在一起。

服务来自其他虚拟主机的静态文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM