WSGI应用的响应在浏览器中被下载而不是显示

2 投票
1 回答
638 浏览
提问于 2025-04-17 11:02

我正在尝试在Ubuntu服务器上托管一个WSGI应用程序(用webpy写的,托管在Apache上)。每当我运行我的应用程序时,浏览器会下载JSON响应,而不是直接显示出来。不过在本地运行时,这个应用程序一切正常。以下是这个WSGI应用程序的代码(来自http://library.linode.com/frameworks/webpy/ubuntu-10.04-lucid) -

import web
import os
import sys
app_path = os.path.dirname(__file__)
sys.path.append(app_path)
os.chdir(app_path)
urls = ('/(.*)', 'hello')

web.debug = False # You may wish to place this in a config file
app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc() # needed for running with apache as wsgi

class hello:        
    def GET(self, name):
          if not name: 
               name = 'World'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
     app.run()     

我的Apache配置设置是 -

WSGIScriptAlias /project /var/www/mywebsite.com/htdocs/project/main.py
<Directory /var/www/mywebsite.com/htdocs/project>
    Order deny,allow
    Allow from all
    SetHandler wsgi-script
    Options ExecCGI
</Directory>   

当我在浏览器中访问www.mywebsite.com/project/时,会下载一个写着“Hello, World!”的文件。

但是,当我访问www.mywebsite.com/project时,我却看到“未找到”的消息。

1 个回答

2

关于“找不到”的问题,我觉得URL的映射以斜杠开头,这就要求在Apache配置文件中的WSGIScriptAlias条目后面也必须加一个斜杠。

因为如果URL中没有斜杠,WSGI应用会尝试查找一个完全空白的URL。这种情况可以通过两种方式解决。为了初步测试,你可以把URL映射改成

urls = ('(.*)', 'hello')

或者你可以使用mod_Rewrite来确保在路径后面总是加一个斜杠,具体可以参考这里 给URL添加尾部斜杠

关于文件在浏览器中被下载而不是显示的问题,我建议你可以使用一些浏览器调试工具,比如Firebug或Chrome开发者工具,来检查一下“hello world”返回的内容类型。web.py中应该有方法可以设置内容类型。你可以查看这里了解如何设置内容类型 webpy: 如何提供JSON

希望这些能帮到你

撰写回答