Я также задавал этот вопрос на Переполнение стека, но я подумал, что лучше спросить здесь.
У нас есть следующее правило перезаписи на 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. Теперь работает.