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

反向代理下.NET Core Views/Home/*页面404错误的解决咨询

问题原因及解决方案

核心问题分析

  1. 路由未适配路径前缀:你在Program.cs里设置了PathBase = "/eng",但HomeController的[Route("Privacy")]是绝对路由规则,后端MVC会把请求路径解析为/Privacy而非/eng/Privacy,导致路由匹配失败触发404。
  2. 多余代理配置干扰逻辑:你新增的ProxyPass /eng/Home/和/eng/Views/Home/完全没必要——最初的ProxyPass /eng http://localhost:5296/已经会把所有/eng开头的请求转发到后端,重复配置反而会打乱路径转发逻辑。另外,MVC的Views文件夹是后端视图模板,不能直接通过URL访问,必须由控制器Action返回,所以针对/eng/Views/Home/的代理配置本身就不合理。
  3. PathBase设置不规范:自定义中间件设置PathBase不如官方的UsePathBase中间件可靠,后者会自动让MVC路由、静态资源等组件识别路径前缀。

具体修复步骤

1. 修正Program.cs的PathBase配置

替换原来的自定义中间件,使用官方提供的中间件:

// 移除原有自定义中间件,添加此行
app.UsePathBase("/eng");

2. 调整控制器路由(二选一即可)

方式一:给控制器添加路由前缀

给HomeController添加[Route("Home")]前缀,让Action路由自动带上控制器前缀,同时适配PathBase:

using Microsoft.AspNetCore.Mvc;

namespace YourProject.Controllers;

[Route("Home")]
public class HomeController : Controller
{
    [Route("Privacy")]
    public IActionResult Privacy()
    {
        return View();
    }
}

此时访问路径为www.mydomain.com/eng/Home/Privacy,后端会正确匹配到Home/Privacy路由。

方式二:使用MVC默认路由

删除控制器上的[Route]特性,改用传统默认路由配置(更贴合MVC项目常规场景):
首先在Program.cs里添加默认路由规则:

app.UseRouting();

// 确保在UseRouting之后、MapControllers之前添加
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

然后修改HomeController,去掉[Route("Privacy")]:

using Microsoft.AspNetCore.Mvc;

namespace YourProject.Controllers;

public class HomeController : Controller
{
    public IActionResult Privacy()
    {
        return View();
    }
}

此时访问www.mydomain.com/eng/Home/Privacy即可正常加载视图。

3. 清理多余的Apache配置

删除后来添加的两段代理配置,只保留最初的核心规则:

# 仅保留这两行即可
ProxyPass /eng http://localhost:5296/
ProxyPassReverse /eng http://localhost:5296/

验证

完成修改后,重启Apache和.NET Core服务,访问www.mydomain.com/eng/Home/Privacy即可正常加载Privacy视图页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:00:17