在cPanel共享主机部署Flask应用仅根URL可访问的问题求助
Flask应用在cPanel共享服务器部署后非主页路由404问题排查与解决
核心问题分析
主页能正常加载,但/about-us等子路由返回404,说明Passenger未正确将非静态/非文件的请求转发给Flask应用,核心问题出在.htaccess的Rewrite规则配置不完整,同时存在路由规范细节问题。
解决方案步骤
1. 修复.htaccess配置
你的.htaccess缺少关键的请求转发规则,导致非静态资源请求无法被Flask处理。替换为以下完整配置:
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN PassengerAppRoot "/home/user/public_html/subdomain.domain.com" PassengerBaseURI "/" PassengerPython "/home/user/virtualenv/public_html/subdomain.domain.com/3.8/bin/python" PassengerAppLogFile "/home/user/public_html/subdomain.domain.com/error.log" # DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END RewriteEngine On # 直接返回静态文件请求,不经过Flask RewriteRule ^static/ - [L] # 将所有非文件、非目录的请求转发给Flask入口处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /passenger_wsgi.py/$1 [L]
- 移除了原配置中无效的
RewriteRule ^http://%{HTTP_HOST}%{REQUEST_URI} \[END,NE\](语法错误且无实际作用) - 新增最后一行规则,确保所有动态请求都被Passenger转发给Flask应用
2. 修正路由规范
views.py中services路由缺少开头的斜杠,虽然Flask会自动补全,但为避免潜在路径解析问题,统一规范路由写法:
# 原代码 @views.route('services/') # 修改为 @views.route('/services/')
3. 验证基础配置与权限
- 确保
passenger_wsgi.py、app.py及website目录下所有文件权限为644,目录权限为755 - 确认虚拟环境路径
/home/user/virtualenv/public_html/subdomain.domain.com/3.8/bin/python正确,且已安装Flask等所有依赖 - 查看
error.log文件(路径已在.htaccess中配置),排查是否存在依赖缺失或运行时报错
验证修改
- 保存所有文件修改
- 在cPanel的Passenger管理界面重启对应应用
- 访问
subdomain.domain.com/about-us和subdomain.domain.com/services/,确认页面正常加载
内容的提问来源于stack exchange,提问作者PAWAN BISHT
相关产品推荐
相关产品推荐

