IIS 7.5 URL 重写和 404 未找到

IIS 7.5 URL 重写和 404 未找到

我正在尝试使用 IIS 设置反向代理,将端口 80 上的请求代理到端口 8080 上的本地虚拟机。重写规则是使用 IIS GUI“反向代理”规则设置的。但是它的工作方式非常奇怪:

如果 Web 文件夹(物理路径)中有文件/文件夹,则反向代理有效。否则,它会抛出 404 错误。

例如,对于“http://example.com/myfile“,如果在 web 文件夹中有文件名“myapp”,那么它将被重写为“http://example.com:8080/myfile“正确。另一方面,如果本地没有文件“myfile”,那么我会得到 404 错误。就好像在处理 URL 重写规则之前有一些东西会检查本地文件的存在(并抛出 404)。

我尝试禁用一些句柄,重新排序模块,但似乎都不起作用:(

在 Windows Server 2008 R2 上运行 IIS 7.5

答案1

如果您有 ASP.NET MVC 应用程序并出现 404 错误,则可以通过在路由中添加忽略路径来解决此问题。

routes.Ignore("要忽略的路径");

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.Ignore("api/controllerNmae/actionName");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

答案2

对我来说,通过从配置中的模块元素中删除 runAllManagedModulesForAllRequests="true" 就可以了。我认为这会导致先运行所有站点级模块,然后再到达 UrlRewrite 模块。

答案3

好的,我最终通过从站点中删除 IsapiFilterModule 和 IsapiModule 使其正常工作。

答案4

我只需要为本地运行的一个应用服务器设置反向代理。我遇到了 404 错误,但随后将其添加<httpRedirect enabled="false" />到站点物理目录中的 web.config 中,它就起作用了。我的 web.config 如下所示

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpRedirect enabled="false" />
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8153/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

相关内容