Cpanel部署Flask应用问题:非首页模板及静态资源无法访问
Cpanel下Flask+WordPress路径冲突修复方案
问题根源
当前.htaccess的规则顺序和转发逻辑存在问题:
- WordPress规则排在最前,且最后一条规则带
[L]标记,会把所有非文件/非目录的请求直接转去WordPress的index.php,后续Flask规则根本没机会执行。 - Flask转发规则仅指向目录,未关联到Flask的WSGI入口文件,导致子路由无法被解析。
- 静态文件请求被错误转发,导致加载失败。
修改后的.htaccess代码
# BEGIN WordPress RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / # 先处理Flask相关请求,跳过WordPress规则 RewriteRule ^app_name(/.*)?$ - [L,NC] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress # php -- BEGIN cPanel-generated handler, do not edit # Set the "ea-php81" package as the default "PHP" programming language. <IfModule mime_module> AddHandler application/x-httpd-ea-php81 .php .php8 .phtml </IfModule> # php -- END cPanel-generated handler, do not edit # Flask应用路由处理:指向WSGI入口文件 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^app_name/(.*)$ /path/to/flask/app/passenger_wsgi.py/$1 [L,PT] # 确保Flask静态文件可以直接访问 RewriteCond %{REQUEST_URI} ^/app_name/static/ RewriteRule ^(.*)$ $1 [L]
关键修改说明
- 调整规则顺序:在WordPress核心规则前加入跳过Flask路径的规则,确保Flask相关请求不会被WordPress拦截。
[NC]标记忽略大小写,避免路径大小写问题。 - 关联Flask WSGI入口:把转发规则指向Flask的WSGI入口文件(通常是
passenger_wsgi.py,如果你的入口文件名不同,替换成实际名称),[PT]标记让Apache把请求传递给WSGI处理器,使Flask能解析子路由。 - 静态文件直接访问:添加规则让
/app_name/static/路径下的文件直接返回,不经过Flask转发,解决静态资源加载失败问题。
额外检查项
- 确认Flask项目的
passenger_wsgi.py配置正确,示例内容:
from app import app as application
(这里的app是你的Flask应用实例所在的文件,比如app.py)
2. 确保Flask项目的static文件夹路径正确,模板文件的静态资源引用使用Flask内置的url_for方法(比如url_for('static', filename='img/logo.png'))生成链接。
内容的提问来源于stack exchange,提问作者danited
相关产品推荐
相关产品推荐

