Использование настраиваемого преобразователя URL-адресов, IIS6 и URL-адресов с .htm, .html и т. Д. - PullRequest
1 голос
/ 31 декабря 2008

У меня есть собственный сайт, который я создаю с автоматическим перезаписыванием URL с использованием собственного движка. Перезапись работает хорошо, пока URL страницы не заканчивается чем-то вроде .htm или .html. Для этих страниц он идет непосредственно на страницу iis 404 вместо того, чтобы сначала запустить мой механизм перезаписи.

У меня есть обработчик * подстановочного знака в разделе «Домашний каталог» конфигурации IIS6 этого веб-сайта, но эти URL-адреса, похоже, игнорируются им (например, css, jpg, js и т. Д., Которые отправляются обработчику URL в моем веб-проекте). Как настроить IIS6, чтобы заставить эти URL-адреса отправляться обработчику, при этом обслуживая страницу, если она существует нормально?

Обработчик в основном делает это

if (!File.Exists(Request.Path))
{
    doMyRewriting();
}

Я должен предположить, что при использовании подобного блока (просто и пример, реальный делает некоторые другие вещи для форматирования Request.Path, чтобы все было правильно) должен запустить «doMyRewriting ()», если запрошенный файл делает не существует, иначе он будет обслуживать страницу в обычном режиме. Я ошибаюсь?

Если я специально скажу IIS отправлять страницы .htm и .html через обработчик .NET, перезапись будет работать, но если страница действительно есть, она не будет обслуживаться.

Любая помощь будет принята с благодарностью.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 31 декабря 2008

Не знаю, можете ли вы или хотите сделать это, но есть переписчик URL Ionics Isapi, который вы можете использовать.

http://www.codeplex.com/IIRF

По сути, установите это, а затем установите правило для удаления .html таким образом, чтобы оно попало в ваш механизм перезаписи. Я использую его на IIS 6 с несколькими своими блогами.

1 голос
/ 03 января 2009

По моему мнению, переписывание URL-адресов с помощью IIS 6 лучше всего обрабатывать с помощью фильтра ISAPI, написанного как неуправляемый собственный код. В противном случае вы столкнетесь с проблемами, о которых вы упомянули, - с необходимостью сопоставления всех расширений с ASP.Net и потерей возможности простой обработки файлов. С помощью фильтра ISAPI вы можете не перезаписывать некоторые URL-адреса и разрешать IIS обрабатывать их как обычно.

Для начала предлагаю прочитать Обзор фильтра ISAPI в MSDN.

Если вашему фильтру абсолютно необходима среда выполнения .Net, можно написать небольшую оболочку фильтра ISAPI, которая содержит CLR и перенаправляет запросы в некоторый управляемый код. Filter.Net Framework использует этот подход и может подойти для ваших нужд. У этого подхода есть небольшой недостаток, заключающийся в том, что вам придется использовать ту же версию .Net, что и в любых приложениях ASP.Net, которые запускаются в основном процессе IIS.

1 голос
/ 31 декабря 2008

Я думаю, что если у вас IIS отправляет все запросы в .NET и вашему обработчику, тогда ваш обработчик должен будет определить, существует ли страница, и обработать ее вместо перезаписи.

UrlRewriting.NET имеет возможность сделать это - вы можете посмотреть на их код, чтобы увидеть, как они обрабатывают этот случай.

...