【问题标题】:Web.py Apache mod_wsgi url rewriteWeb.py Apache mod_wsgi url 重写
【发布时间】:2013-12-18 08:49:33
【问题描述】:

我相信我已经使用 mod_wsgi 和 Rewrite Engine 正确设置了 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>

Python 代码:

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()

更新:在玩了 Rewrite 之后,我发现问题出在 RewriteRule ^(.*)$ code.py/$1 [PT]$1(参数)传递运行 python 脚本的根以及来自根 url 的 URL 的其余部分。

因此,URL 就是一个例子:

http://{rootURL}/tom

输出:

Hello, /var/www/example.com/application/tom!

不知道为什么要传入python脚本的目录位置。

【问题讨论】:

  • 您认为为什么需要重写 URL? WSGIScriptAlias 应该直接为您的应用程序服务,无需重写。
  • 我正在使用本教程进行设置。 codero.com/knowledge-base/questions/316/… 我希望 url 不显示 code.py。
  • @Jeremy:这就是 WSGIScriptAlias 的用武之地;它需要一个根 URL 并使用您的 WSGI 脚本来服务器该 URL。在这种配置中,code.py 永远不会成为 URL 的一部分。
  • @MartijnPieters 我不希望 code.py 出现在我的 URL 中。除了传递给我的python脚本的参数是脚本的文件路径之外,这一切都有效。我不知道为什么会这样。

标签: python apache web.py


【解决方案1】:

按照http://webpy.org/cookbook/mod_wsgi-apache 的教程,我相信您真的不需要重写 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>

(在其他更改中,请注意在WSGIScriptAlias 指令中添加的code.py/。)

而文件/var/www/example.com/application/code.py是:

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()

(注意开头urls元组中添加的斜线。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2017-05-17
    • 2018-02-20
    • 2014-05-28
    相关资源
    最近更新 更多