У меня есть небольшой сайт интрасети под 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);