Правило перезаписи URL-адреса IIS игнорируется, когда путь является частью виртуального каталога

#asp.net-core #iis #url-rewriting

#asp.net-core #iis #url-перезапись

Вопрос:

Я пытаюсь создать правило перезаписи URL-адреса в IIS, которое перенаправляет пользователя на новую веб-страницу. Путь для правила представляет собой удаленный файл PDF, который содержался в виртуальном каталоге. У меня это правило работает на существующем сайте, но на нашем новом / обновленном веб-сайте используется.Net core — правило не работает (возвращает код состояния 404). Настройка виртуального каталога такая же — /pdf. Похоже, что правило полностью игнорируется, если это виртуальный каталог.

 Website
│   New_Web_Page
└───pdf (virtual directory)
│   │   A_PDF_File.pdf
 
 <rule name="PDF Redirect Rule" stopProcessing="true">
  <match url="pdf/A_PDF_File.pdf" />
  <action type="Redirect" url="New_Web_Page" redirectType="Permanent"  />
</rule>
 

Комментарии:

1. если перезапись URL-адреса важна для вашего бизнеса, я думаю, вам следует попробовать делегировать эту задачу asp.net core промежуточному программному обеспечению. Полагаться на IIS может быть знакомо вашей команде, но, конечно, это не гибко, например, когда ваше приложение необходимо развернуть с использованием другого типа хоста, например: . docker Конечно, это немного отличается от того, что вы хотите в любом случае. IIS

2. К сожалению, на этом сайте есть несколько приложений. Другие веб-приложения имеют asp.net веб-формы и полагаются на функционирование некоторых из этих виртуальных каталогов. Наша цель — в конечном итоге устранить эти устаревшие приложения, когда у нас будет время их переписать (или включить их в новый сайт).

Ответ №1:

Размещение файла web.config в виртуальном каталоге с соответствующим правилом перезаписи устраняет проблему. Правило необходимо будет изменить, чтобы оно соответствовало размещению файла. Правило:

 <rule name="PDF Redirect Rule" stopProcessing="true">
  <match url="A_PDF_File.pdf" />
  <action type="Redirect" url="/New_Web_Page" redirectType="Permanent"  />
</rule>
 

И каталог теперь выглядит так:

 Website
│   New_Web_Page
└───pdf (virtual directory)
│   │   A_PDF_File.pdf
│   │   web.config