如何在同一服务器上配置Apache以同时支持Flask与PHP
Apache同时处理PHP与Flask页面的配置方案
问题场景
服务器升级后同时运行PHP页面与基于Flask框架的Python页面,已通过WSGI配置Apache部署Flask,但访问时出现500内部服务器错误。旧服务器通过DirectoryIndex将目录URL默认指向index.php,当前需要实现:
- 同时正常处理PHP页面与Flask路由
- Flask所属目录(如
flask_dir1、flask_dir2)内的PHP页面也能正常解析
原Apache配置(出现500错误的版本)
<VirtualHost *:443> ServerName my_fake_site ... AliasMatch ^\/((?:flask_dir1|flask_dir2).*)\.((css|php|png)$((?:\?.*)?)) /var/www/html/app/$1.$2 AliasMatch ^\/(.*)\.(css|html|php|png) /var/www/html/$1.$2 WSGIDaemonProcess main_proc processes=8 python-home=/var/www/html/venv WSGIScriptAlias / /var/www/html/wsgi.py <Directory /var/www/html/> WSGIProcessGroup main_proc WSGIApplicationGroup %{GLOBAL} Require all granted </Directory> SSLEngine on ... </VirtualHost> WSGIPythonPath /var/www/html WSGIPythonHome /var/www/html/venv
调整后的有效配置
通过新增AliasMatch规则并调整原有规则,已实现预期效果,调整后的规则如下:
AliasMatch ^\/((?:flask_dir1|flask_dir2).*)\.((css|php|png)$((?:\?.*)?)) /var/www/html/app/$1.$2 AliasMatch ^\/(.*)\.(css|html|png) /var/www/html/$1.$2 AliasMatch ^\/((?:php_dir1|php_dir2).*) /var/www/html/$1
完整配置补充说明
Flask与静态资源路由:
- 第一条
AliasMatch优先匹配Flask目录下的静态资源(css、php、png),将请求映射到实际路径/var/www/html/app/下,确保Flask目录内的PHP页面能被正确定位 WSGIScriptAlias / /var/www/html/wsgi.py将根路径下未被Alias匹配的请求交给Flask处理
- 第一条
PHP页面处理:
需确保Apache已加载PHP处理模块(如mod_php),并添加以下配置以解析PHP文件:<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> # 若使用php-fpm则替换为: # SetHandler "proxy:fcgi://127.0.0.1:9000"同时保留
DirectoryIndex配置,确保目录请求默认指向index.php:DirectoryIndex index.php index.html权限与进程组:
确保/var/www/html/及子目录的权限允许Apache进程读取,WSGI进程组配置保持不变,避免Python运行环境冲突。
内容的提问来源于stack exchange,提问作者pwesterbaan
相关产品推荐
相关产品推荐

