Apache+WSGI中文文件名导致HTTP请求返回500问题解决方法




问题症状

Centos7服务器上搭建了Apache服务,版本httpd-2.4.6-67.el7.centos.6.x86_64,配合mod_wsgi+python+flask搭建web网站。

用flask的render_template渲染html页面,并且用配置文件里的文件名和路径来生成文件下载链接,如果文件路径包含中文,会在请求页面时返回500响应码,而python main.py前台启动没有这个问题,改成英文文件名后Apache+WSGI启动方式也恢复正常。

相关代码如下所示:

解决方法

网上搜到很多方法都是说修改/etc/apache2/envvars文件,但新版本Apache已经没这个文件了,折腾了好久都没进展,偶然看了下Apache的systemd的启动脚本/usr/lib/systemd/system/httpd.service,发现里面有个EnvironmentFile配置项:

原来是在这里配置的,尝试把原来的LANG=C改成上面两行,之后重启Apache服务,再访问出问题的页面,一切正常了,问题解决。