Исключение каталога с ISAPI-Rewrite

Я пытаюсь исключить каталог с ISAPI-Rewrite (примечание: это порт windows / iis mod-rewrite).

Каталог, который я хочу исключить, это "api", когда он находится в корне сайта.

Вот мое правило:

RewriteRule ^ (/ api /)(.+)$ $ 1 $ 2 [NC, L]

Запрос будет выглядеть примерно так: /api/v2/users? Usernames = scottw

К сожалению, значение квест-строки всегда исключается, а URL переписывается как /api/v2/users.

Я атакую ​​в предположении, что (. +) Захватит все остальное.

Какие-либо предложения? Или лучший способ исключить каталог?

Спасибо

Обновление: я также упростил правило, но это тоже ничего не изменило:

RewriteRule ^ (/ api /.+)$ $ 1

2 ответа

Решение

Оказывается, здесь происходят две вещи:

  1. Регулярное выражение должно быть ^(api/), а не ^(/api). Первый знак "/" исключен.
  2. Средство синтаксического анализа regex, поставляемое с ISAPI_Rewrite, похоже, неправильно обрабатывает строки запросов.

Правило, которое в конечном итоге работает:

RewriteRule ^(api/.+) $1 [NC,L]

Я видел, как иногда ".+" Работает странно, вы можете попробовать переключиться на "…". Я не говорю, что это сработает, но, возможно, стоит попробовать.

Другие вопросы по тегам