【发布时间】: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脚本的参数是脚本的文件路径之外,这一切都有效。我不知道为什么会这样。