Python Web.py Apache mod_wsgi url重写

Python Web.py Apache mod_wsgi url重写,python,apache,web.py,Python,Apache,Web.py,我相信我已经用mod_wsgi和重写引擎正确地安装了Apache。我正在使用web.py提供内容。测试“Hello World”应用程序可以工作,但输出包括文件根。 看起来像这样: Hello, /var/www/example.com/application/! 我已经包括了配置和代码 以下是apache配置: <VirtualHost *:80> ServerAdmin admin@example.com ServerName foodcost.mynetwor

我相信我已经用mod_wsgi和重写引擎正确地安装了Apache。我正在使用web.py提供内容。测试“Hello World”应用程序可以工作,但输出包括文件根。 看起来像这样:

Hello, /var/www/example.com/application/!
我已经包括了配置和代码

以下是apache配置:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName foodcost.mynetwork.inside
    ServerAlias foodcost.mynetwork.inside
    DocumentRoot /var/www/example.com/public_html/
    ErrorLog /var/www/example.com/logs/error.log
    CustomLog /var/www/example.com/logs/access.log combined
    WSGIScriptAlias / /var/www/example.com/application/

    Alias /static /var/www/example.com/public_html

    <Directory /var/www/example.com/application>
      SetHandler wsgi-script
      Options ExecCGI
      Options +FollowSymLinks
    </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>
更新:在重新编写之后,我发现问题出在
RewriteRule^(.*)$code.py/$1[PT]
上。
$1
(参数)传递python脚本运行位置的根,以及根URL中的URL其余部分

例如URL:

http://{rootURL}/tom
输出:

Hello, /var/www/example.com/application/tom!
我不明白为什么要传入python脚本的目录位置。

在上的教程之后,我相信您真的不需要重写URL。您的apache配置是:

<VirtualHost *:80>

    ServerAdmin admin@example.com
    ServerName foodcost.mynetwork.inside
    ServerAlias foodcost.mynetwork.inside
    DocumentRoot /var/www/example.com/public_html/
    ErrorLog /var/www/example.com/logs/error.log
    CustomLog /var/www/example.com/logs/access.log combined

    WSGIScriptAlias / /var/www/example.com/application/code.py/
    Alias /static /var/www/example.com/public_html

    <Directory /var/www/example.com/application>
      SetHandler wsgi-script
      Options ExecCGI
      Options +FollowSymLinks
    </Directory>

    AddType text/html .py

</VirtualHost>
(注意开头的
url
元组中添加的斜杠

这样就不会出现“code.py”:


为什么您认为需要重写url?WSGIScriptAlias应该直接为您的应用程序提供服务,而无需重写。我使用本教程进行设置。我希望url不显示代码。py。@Jeremy:这就是WSGIScriptAlias的作用所在;它使用根url并使用WSGI脚本创建urlserver该URL。
code.py
在这种配置中永远不会是URL的一部分。@MartijnPieters我不希望code.py出现在我的URL中。这一切都可以正常工作,除了传递给python脚本的参数是脚本的文件路径。我不明白为什么会发生这种情况。
<VirtualHost *:80>

    ServerAdmin admin@example.com
    ServerName foodcost.mynetwork.inside
    ServerAlias foodcost.mynetwork.inside
    DocumentRoot /var/www/example.com/public_html/
    ErrorLog /var/www/example.com/logs/error.log
    CustomLog /var/www/example.com/logs/access.log combined

    WSGIScriptAlias / /var/www/example.com/application/code.py/
    Alias /static /var/www/example.com/public_html

    <Directory /var/www/example.com/application>
      SetHandler wsgi-script
      Options ExecCGI
      Options +FollowSymLinks
    </Directory>

    AddType text/html .py

</VirtualHost>
import web

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

app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc()

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

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