Я просто создал приложение asp.net и просмотрел разные страницы, такие как страница курсов.
Я запускаю все на: localhost: 50717 на IIS.
У меня есть страница route.html с тегом ng-view. Первоначально, если бы я хотел перейти к просмотру курсов, я бы набрал: localhost: 50717/routes.html #/курсы. Однако я хотел бы переписать URL-адрес так, чтобы я мог просто сделать это: localhost: 50717/courses
Поэтому в моем JS файле я добавил:
$locationProvider.html5Mode(true);
В начале моей html-страницы я добавил:
<base href="/" />
В моем файле web.config я вставляю этот код в тег system.webServer XML:
<rewrite>
<rules>
<rule name="RewriteRules" stopProcessing="true">
<match url=".*"/>
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true"/>
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
Когда я перехожу к: localhost: 50717/routes.html и нажимаю ссылку: <a href="courses"> Курсы </a>
Это подталкивает меня к localhost: 50717/курсы просто отлично. Это также отлично работает, когда я удаляю этот код, чтобы включить запись URL.
Это только когда я пытаюсь перезагрузить страницу, на которой я получаю ошибку 404, или когда я пытаюсь перейти на localhost: 50717, что он думает, что я перехожу в базовый каталог вместо страницы route.html.
Я даже установил переписывание URL на моем IIS по адресу: http://www.iis.net/downloads/microsoft/url-rewrite
Я перешел на "Download URL Rewrite Module 2.0" и нажал на ссылку загрузки x64 и загрузил ее правильно и смог увидеть URL-адрес перезаписи для моих сайтов по умолчанию в IIS. Что еще я могу здесь сделать?
Если "/routes.html" представляет корень вашего сайта, вы должны убедиться, что содержимое этого файла будет возвращено для каждого соответствующего запроса в ваше приложение.
Т.е. когда вы звоните "/Курсы", вы получаете 404, потому что нет контента/маршрута/ресурса, соответствующего этому URL-адресу. То, что вы хотели бы вернуть, - это содержимое "/routes.html", а затем разрешить маршрутизацию AngularJS снова на стороне клиента.
Я бы предложил перечитать AngularJS HTML5-mode; разница между использованием "/#/Курсы" и "Курсы" более значительна, чем может показаться на первый взгляд, рег. как вы должны настроить свои маршруты.