IONOS Linux VPS切换HTTPS后React静态文件返回404如何解决?
问题根因定位
你当前的HTTPS虚拟主机配置中,ProxyPass / https://127.0.0.1:5001/ 规则会将根路径下的所有请求全部转发给.NET Core后端服务,静态文件请求不会被Apache分发到指定的静态资源目录,全部交给没有对应静态路由的后端处理,自然返回404。
排查步骤
- 执行
apache2ctl -S查看所有加载的虚拟主机配置,确认当前生效的443端口主机规则是否为带ProxyPass的转发规则,验证你手动添加的静态目录配置是否被Plesk自动生成的配置覆盖(Plesk生成的配置优先级默认高于手动修改的apache2.conf、sites-enabled下的文件)。 - 查看.NET Core服务的运行日志,确认访问静态文件时请求是否确实被转发到了后端服务,排除目录权限问题导致的404。
- 检查静态文件目录权限,确认运行Apache的默认用户
www-data有对应目录的读取权限。
修复方案
方案1:调整Apache代理规则(推荐,改动最小)
在Plesk面板对应站点的「Apache & nginx 设置」-「附加指令」中修改HTTPS配置,仅转发API前缀的请求到后端,其余请求走静态文件目录,配置示例如下:
SSLProxyEngine on SSLProxyCheckPeerCN off SSLProxyCheckPeerName off ProxyPreserveHost On # 仅转发/api开头的接口请求到.NET Core ProxyPass /api https://127.0.0.1:5001/api ProxyPassReverse /api https://127.0.0.1:5001/api # 其余请求走静态文件目录 DocumentRoot /var/www/vhosts/default/htdocs/ <Directory /var/www/vhosts/default/htdocs> Allow from all Options -MultiViews Require all granted # 新增React路由重写规则,解决前端路由刷新404问题 RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </Directory> ServerName mywebsite.com ServerAlias *.mywebsite.com ErrorLog ${APACHE_LOG_DIR}error.log CustomLog ${APACHE_LOG_DIR}access.log common
修改完成后执行systemctl reload apache2重载配置即可生效。
方案2:用.NET Core托管静态文件(适合前后端同端口部署)
将React build目录下的所有文件放到.NET Core项目的wwwroot目录中,然后在.NET Core项目的Program.cs(或Startup.cs)中添加静态文件托管中间件:
// 注意放在路由中间件、控制器映射逻辑之前 app.UseDefaultFiles(); // 自动识别index.html为默认首页 app.UseStaticFiles(); // 托管wwwroot目录下的所有静态资源
重新编译发布.NET Core项目即可,不需要修改Apache原有配置,所有请求统一走后端,由后端自动区分处理静态文件和API请求。
内容的提问来源于stack exchange,提问作者Ataa Aub
相关产品推荐
相关产品推荐

