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

如何在同一服务器上配置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

完整配置补充说明

  1. Flask与静态资源路由:

    • 第一条AliasMatch优先匹配Flask目录下的静态资源(css、php、png),将请求映射到实际路径/var/www/html/app/下,确保Flask目录内的PHP页面能被正确定位
    • WSGIScriptAlias / /var/www/html/wsgi.py将根路径下未被Alias匹配的请求交给Flask处理
  2. 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
    
  3. 权限与进程组:
    确保/var/www/html/及子目录的权限允许Apache进程读取,WSGI进程组配置保持不变,避免Python运行环境冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:21:02