Назад | Перейти на главную страницу

Странное поведение IIS при перезаписи

Я также задавал этот вопрос на Переполнение стека, но я подумал, что лучше спросить здесь.

У нас есть следующее правило перезаписи на IIS7.5:

<rule name="Anything else to the event handler" enabled="true" stopProcessing="true">
  <match url="^(.*)$" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{PATH_INFO}" pattern="^.*(/index.cfm/).*$" negate="true" />
  </conditions>
  <action type="Rewrite" url="/index.cfm/{R:1}" appendQueryString="true" logRewrittenUrl="true" />
</rule>

Однако он никогда не ставит / {R: 1} после него. Он просто идет в /index.cfm. Нам действительно нужно получить ссылочную переменную, потому что мы используем ее в наших скриптах ColdFusion (10). Пример переписывания URL-адреса, который мы хотели бы:

Из: http://www.my-site.com/this.is.a.test/another.test

Кому: http://www.my-site.com/index.cfm/this.is.a.test/another.test

Кто-нибудь знает, почему он этого не сделает? (быстрое примечание: при выполнении правильного URL-адреса может возникнуть ошибка ColdFusion, но я бы не подумал, что это вызовет проблемы с перезаписью?)

Обратите внимание: это действительно работает, когда вы пробуете то же самое в браузере (с отключенным правилом) - но не с правилом перезаписи. При использовании правила перезаписи переменная cgi.PATH_INFO в CF возвращает пустую строку.

Кроме того, IIS заявляет, что переписал URL-адрес index.cfm / this.is.a.test / another.test в журналах, что странно. Использование перенаправления 301 вместо перезаписи позволяет ему отлично работать (ничего не меняет в правиле, только тип действия для перенаправления). Это для меня очень странно, так как я ожидал, что переписывание будет работать почти так же, как переадресация, только разница в том, что переписывание является внутренним.

У нас также есть Helicon Ape на нашем сервере, поэтому, если у вас есть решение для этого в mod_rewrite вместо модуля IIS, предложите его.

Проблема заключалась в том, что нам нужно было переделать инструмент настройки Coldfusion 10 после того, как мы вчера применили новое обновление 11. Теперь работает.