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

Ошибка 404 перезаписи URL-адреса IIS

У меня есть небольшой сайт интрасети под Windows 7 и IIS, и у меня есть страница page/LoadPage.aspx которая является страницей контейнера ASPX для отображения запрошенной страницы, например http://localhost/page/LoadPage.aspx?p=downloads (который загружает downloads.html находится в корневом каталоге).

Проблема в том, что при создании удобного для пользователя URL-адреса с помощью подключаемого модуля URL Rewrite в IIS 7, если тег запроса (p) запрашивает страницу в определенном каталоге (например, http://localhost/page/LoadPage.aspx?p=downloads/software, который должен загрузить страницу downloads/software.html), то будет выдана ошибка 404, потому что сервер считает, что пользователь запросил каталог.

Отображение и перенаправление делать работать для одиночных запросов вроде page/LoadPage.aspx?p=downloads который успешно перенаправляет на http://localhost/downloads.html.

Спасибо.

ОБНОВИТЬ: Вот код. Может в этом проблема?

Пример URL: /page/LoadPage.aspx?p=downloads (Это работает и перенаправляет на downloads.html)

Пример URL: /page/LoadPage.aspx?p=downloads/software (Это не работает, но предназначено для перенаправления на /downloads/software.html)

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim p = Request.QueryString("p").ToString
        Dim page = HttpUtility.UrlDecode(p)
        Dim ReadHTML As New IO.StreamReader("\\PC\User\Documents\IIS Websites\Intranet\" & page & ".html")
        container.InnerHtml = ReadHTML.ReadToEnd
    End Sub

Я решил проблему. Похоже, что IIS не любит / в запросе, если это не двойной сбежал вот так %252f. Однако он не заменит его косой чертой, и поэтому URL-адрес выглядит беспорядочным. Я избежал этой проблемы, используя подчеркивание для символа косой черты: /page/LoadPage.aspx?downloads_software Затем он заменяет двоеточие на косую черту во время выполнения (к сожалению, изменение не отображается в URL-адресе).

/ является зарезервированным символом, поэтому вам нужно будет закодировать URL-адрес значения строки запроса.

Ваш URL должен выглядеть так:

http://localhost/page/LoadPage.aspx?p=downloads%2Fsoftware

Чтобы использовать значение в вашем .NET-коде, вам нужно будет его декодировать:

HttpUtility.UrlDecode(value);

https://msdn.microsoft.com/en-us/library/adwtk1fy.aspx