Web.py URL映射不接受'/

1 投票
1 回答
1862 浏览
提问于 2025-04-16 03:33

我看到的每一个web.py教程里都有这一行:

urls = (
    '/', 'index',
)

然后,后面会定义一个index类,里面有一个GET函数等等。我的问题是,这个不管用。用上面的代码,我得到了一个404错误。用下面的映射就能正常工作:

urls = (
    '/.*', 'index',
)

但这样的话,至少一开始会捕捉到每一个可能的URL,而我只想让“index”处理访问网站根目录的请求。求助啊?

一些基本信息:

Python 2.6,web.py 0.3,Apache 2.2和mod_wsgi

不太确定还有什么信息会有用,所以如果有重要的内容我可以补充(比如Apache的VirtualHost配置?)请问我会在这里添加。

编辑:包括我的Apache VirtualHost配置:

<VirtualHost *:80>
    ServerName dd.sp4.us
    DocumentRoot /home/steve/www/nov2010/public/
    ErrorLog /home/steve/www/nov2010/log/error.log
    CustomLog /home/steve/www/nov2010/log/access.log combined

    WSGIScriptAlias / /home/steve/www/nov2010/app
    Alias /static /home/steve/www/nov2010/public

    <Directory /home/steve/www/nov2010/app>
        SetHandler wsgi-script
        Options ExecCGI
    </Directory>

    AddType text/html .py

    <Location />
        RewriteEngine on
        RewriteBase /
        RewriteCond %{REQUEST_URI} !^/static
        RewriteCond %{REQUEST_URI} !^(/.*)+code.py/
        RewriteRule ^(.*)$ code.py/$1 [PT]
    </Location>
</VirtualHost>

1 个回答

5

背景阅读:

http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines

假设你只有一个WSGI应用程序需要放在网站的根目录下,而所有静态文件或其他资源都放在/static目录下,那么你应该用:

WSGIScriptAlias / /home/steve/www/nov2010/app
Alias /static /home/steve/www/nov2010/public

<Directory /home/steve/www/nov2010/app>
    SetHandler wsgi-script
    Options ExecCGI
</Directory>

AddType text/html .py

<Location />
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_URI} !^/static
    RewriteCond %{REQUEST_URI} !^(/.*)+code.py/
    RewriteRule ^(.*)$ code.py/$1 [PT]
</Location>

而不是:

Alias /static /home/steve/www/nov2010/public

WSGIScriptAlias / /home/steve/www/nov2010/app/code.py

<Directory /home/steve/www/nov2010/app>
Order allow,deny
Allow from all
</Directory>

你把多种配置mod_wsgi的方法混在一起了,这些方法不应该一起使用。

如果你的需求是其他的,你需要更清楚地说明你想要实现的效果。

撰写回答