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