You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Bottle应用到Apache:是否需为所有路由添加/app1前缀?

不需要修改所有路由前缀!

你完全不用给每个路由手动加上/app1前缀,Apache的WSGIScriptAlias配置已经帮你处理了路径映射的问题,只要调整一下Bottle应用的配置和WSGI脚本的写法就行,具体步骤如下:

1. 调整你的Bottle WSGI脚本

确保你的应用脚本(比如app1.py)导出标准的WSGI应用对象,而不是用run()启动内置服务器。示例代码如下:

from bottle import Bottle, route

# 创建Bottle应用实例
app = Bottle()

# 保持路由不变,依然以"/"开头
@app.route('/')
def app1_root():
    return "这是app1的根页面,访问路径是 /app1/"

@app.route('/user/<name>')
def show_user(name):
    return f"你好,{name}!访问路径是 /app1/user/{name}"

# 导出WSGI应用对象,Apache会调用这个变量
application = app

2. 确认Apache配置正确

你的现有配置WSGIScriptAlias /app1 /var/www/app1/app1.py是没问题的,但建议加上目录权限配置确保Apache能访问文件:

WSGIScriptAlias /app1 /var/www/app1/app1.py
<Directory /var/www/app1>
    Require all granted
</Directory>

3. 处理链接生成(可选)

如果你的应用需要生成内部链接(比如用Bottle的url()函数),为了让链接自动带上/app1前缀,在应用里添加一行配置:

app.config['SCRIPT_NAME'] = '/app1'

这样调用url('/user/foo')就会返回/app1/user/foo,而不是/user/foo。

原理说明

当Apache收到http://yourdomain/app1/user/foo这样的请求时,会把SCRIPT_NAME设为/app1,把PATH_INFO设为/user/foo。Bottle默认是基于PATH_INFO来匹配路由的,所以你原来写的@app.route('/user/<name>')会直接匹配这个请求,完全不需要修改路由路径。

内容的提问来源于stack exchange,提问作者amonroejj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:02:27