Назад | Перейти на главную страницу

IIS 7.5 URL Rewrite and 404 Not Found

Я пытаюсь настроить обратный прокси-сервер с помощью IIS для запроса прокси-сервера через порт 80 на локальную виртуальную машину через порт 8080. Правило перезаписи было настроено с использованием правила «обратного прокси» графического интерфейса IIS. Однако это работает очень странно:

Если в веб-папке (физический путь) есть файл / папка, то обратный прокси работает. В противном случае выдается ошибка 404.

Например, для запроса "http://example.com/myfile", если в веб-папке есть имя файла" myapp ", он будет перезаписан на"http://example.com:8080/myfile"правильно. С другой стороны, если локального файла" myfile "нет, я получаю ошибку 404. Это как если бы что-то проверяло существование локального файла (и выдавало 404) перед обработкой правил перезаписи URL.

Я пытаюсь отключить некоторые ручки, переупорядочить модули, но ничего не работает :(

Запуск IIS 7.5 в Windows Server 2008 R2

Если у вас есть приложение 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 }
        );
    }
}

Хорошо, я наконец-то заставил его работать, удалив с сайта IsapiFilterModule и IsapiModule.

У меня это сработало, сняв runAllManagedModulesForAllRequests = "true" из элемента modules в конфигурации. Я думаю, что это заставляет сначала запускать все модули уровня сайта, чем достигать модуля UrlRewrite.

Мне нужен был только обратный прокси для одного сервера приложений, работающего локально. Я получал 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>