Помощь в переходе с ISAPI_Rewrite на перезапись URL IIS7 - PullRequest
0 голосов
/ 08 января 2010

У меня есть это правило ISAPI_Rewrite:

RewriteRule /([^/.?]+) /sc.asp?p=$1 [I,L]

Это правило должно переписывать URL как:

/ некоторые-статья

/ * 1009 Статья 2 *

и не должны переписывать URL как:

/ home.asp

/ admin (потому что есть каталог с именем admin)

/ админ /

/ сайты / Гаттерман

Отлично работает в ISAPI_Rewrite Вчера я купил VPS для Windows 2008 R2 и начал переносить свое классическое веб-приложение ASP на новый сервер. Теперь все работает отлично, за исключением перезаписи URL. Я немного погуглил и обнаружил, что модуль перезаписи URL IIS7 полностью отличается от ISAPI_Rewrite.

Я создал Пустое правило . В шаблоне, который я установил /([^/.?]+), в Action -> Тип действия я установил Rewrite, а в Action -> Свойства действия -> Переписать URL-адрес, который я установил sc.asp?p={R:0}. Это не сработало.

После некоторого поиска в Google я обнаружил, что мне нужно удалить символ / в начале моего паттерна (так что мой паттерн теперь ([^/.?]+)). Итак, я сделал это, и теперь он просто переписывает любой URL, и он должен переписывать только URL, которые не являются каталогами или файлами.

Есть идеи?

Спасибо.

1 Ответ

1 голос
/ 24 августа 2010

Самый простой способ избежать переписывания URL-адресов, которые фактически указывают на существующие файлы, - это добавить следующие условия:

<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />

Кроме того, ваш шаблон совпадения показывает общее заблуждение. Строка запроса не передается в шаблон соответствия URL, поэтому вам не нужно искать ?.

...