Я использую модуль URL Rewrite 2.0 IIS для создания URL-адреса, который всегда указывает на последнюю версию моего приложения. Я настроил его следующим образом:URL Правила перезаписи перенаправляются вместо перезаписи
<rule name="Latest" stopProcessing="true">
<match url="^latest(.*)" />
<action type="Rewrite" url="1.1{R:1}" />
</rule>
Намерение состоит в том, что если что-то идет к /latest/*
то все URL-адреса перезаписываются в /1.1/*
. Например, /latest/index.html
должно стать /1.1/index.html
.
Это работает, когда я запросить файл, например:
/latest/index.html - works
/latest/js/app.js - works
Однако это не работает:
/latest
Поскольку index.html
является документом по умолчанию, я бы ожидать, что это переписать /1.1/index.html
, но на самом деле это делает redirect. Например, если я введите в адресной строке браузера:
http://<domain>/latest
и нажмите ENTER, оно меняется:
http://<domain>/1.1
как если перенаправлены. Он по-прежнему работает, но я не хочу, чтобы URL-адрес менялся (следовательно, почему я использую Rewrite
, а не Redirect
). Любая идея почему? Что-то не в порядке мое правило?
Спасибо, это, кажется, работает в определенной степени, за исключением всех ресурсов, упоминаемых в index.html, по всей видимости будет загружен из неправильного URL , Например, если я перейду к/последнему, тогда
Когда вы запрашиваете URL
/latest
, ваши правила переписывают его на/1.1
. Так как/1.1
соответствует существующей директории вместо файла, IIS отвечает с переадресацией вежливости as described here. IIS использует переписанный URL-адрес, поскольку он не может видеть исходный URL-адрес.Вместо того, чтобы служить одинаковое содержание через два URL-адреса (
/latest
и/latest/
) Я хотел бы предложить, что вы подражать такое же поведение с помощью правил.Если запрашиваемый URL является/latest
он должен первым перенаправлять/latest/
затем переписывается:источник
2015-04-29 17:46:29
Да, вы правы. Я включил это вместе с ответом Кева, и теперь он ведет себя так, как хотелось бы. Благодаря! – Barguast