Cherrypy似乎在请求路径中添加字母“i”

2024-04-19 05:52:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我当前正在使用以下配置作为CGI运行CherryPy应用程序:

在Apache配置中:

# snip

ScriptAlias /myproject.cgi /var/www/mywebsite/myproject.cgi
<Directory /var/www/mywebsite>
    Options +FollowSymLinks -MultiViews +ExecCGI
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

/var/www/mywebsite/.htaccess中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^acoolproject/?$ myproject.cgi [L]
RewriteRule ^acoolproject/(.*)$ myproject.cgi/$1 [L]
</IfModule>

Apache中的双重重定向似乎是多余的,但它的存在是有原因的。你知道吗

/var/www/mywebsite/myproject.cgi中:

#!/usr/bin/env python

import os
import sys

import cgi
import cgitb
import wsgiref.handlers

import main

cgitb.enable()

def application(env, start_response):
    app = cherrypy.tree.mount(main.Main(), "/acoolproject", config=cherrypy_config)
    return app(env, start_response)

if __name__ == '__main__':
    wsgiref.handlers.CGIHandler().run(application)

在我的主应用程序main.py中,在Main.default方法中有以下调试信息:

class Main(object):

    # snip

    def default(self, *args, **kwargs):
        return cherrypy.request.path_info
    default.exposed = True

问题是,当我浏览到(或cURL到)“http://mywebsite.com/acoolproject”时,调试信息输出字符串“I”。因为这个“i”神秘地出现了,所以请求没有正确地路由到写处理程序,所有的事情最终都由default处理程序处理。你知道吗

我已经检查了我的所有文件的一个打字错误或错误的网址与一个额外的“我”,找不到任何东西。发生这种事有什么原因吗?你知道吗

  • Apache版本:Apache/2.2.22(Debian)
  • Python版本:Python 2.7.3
  • CherryPy版本:CherryPy 3.3.0

更新

如果我将htaccess规则中的路径和装载点从acoolproject更改为proj,那么输出将变为“项目.cgi". 所以看起来CherryPy得到的URL路径类似于path_info = url[len(mount_point):]。你知道吗


Tags: import版本envdefaultmainvarapachemyproject