2016-08-11 9 views
5

Мы разработали приложение Angular2.После размещения приложения Angular2 на IIS прямой url не работает

Он работает нормально, пока мы бежим под углом-cli с помощью «ng serve».

Как только мы размещаем приложение для IIS 7.5, мы можем перейти к корневому каталогу приложения без особых проблем, и мы можем перейти к любым другим представлениям из навигации приложения.

Но проблема начинается, когда пользователь пытается загрузить URL-адрес, предназначенный для определенного маршрута или компонента.

так, если мы идем в http://serverurl ... он загружает index.html, а затем перейдя по ссылке навигации на index.html он принимает пользователь http://serverurl/route1/component1

Но когда пользователь пытается перейти к url http://serverurl/route1/component1, набрав http://serverurl/route1/component1 в адресной строке браузера, он отправляет этот запрос в IIS и возвращает и ошибку с ресурсом, который не найден.

И легко понять, что URL-адрес не существует на сервере. Это угловой url. В идеале, он должен загрузить index.html и передать остальную часть URL-адреса угловому маршрутизатору и загрузить его /route1/component1. И это работает с «ng serve», но не работает с IIS 7.5. Есть ли какие-то настройки, которые мне нужно сделать в IIS, чтобы заставить его работать? Или в чем-то, что я должен сделать в приложении Anuglar2?

Может ли кто-нибудь предложить мне, как исправить это?

+0

Используйте модуль URL Rewrite, чтобы написать правило для перенаправления всего под определенным URL-адресом для использования содержимого этого URL-адреса. –

ответ

23

я получаю это решить, выполнив следующие действия ..

  1. Скачано URL Rewriter модуль из https://www.microsoft.com/en-au/download/details.aspx?id=7435

  2. Добавлено следующее мое web.config

<configuration> 
 
    <system.webServer> 
 
    <rewrite> 
 
     <rules> 
 
     <rule name="AngularJS" stopProcessing="true"> 
 
      <match url=".*" /> 
 
      <conditions logicalGrouping="MatchAll"> 
 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
 
      </conditions> 
 
      <action type="Rewrite" url="/" /> 
 
     </rule> 
 
     </rules> 
 
    </rewrite> 
 
    </system.webServer> 
 
</configuration>

  1. Настройка тега базы данных в index.html. Он должен быть немедленно после < головы > тег

<base href="/"/>

Эти три шага настроит Вас для развертывания Angular2/Угловое App с html5mode URL на IIS 7.5 или IIS 8.0

Надеюсь, это поможет. Мне нужно пройти несколько ответов, чтобы решить эту проблему.

+1

Я пробовал много разных способов сделать это, и это, безусловно, самый чистый и лучший способ, который я видел. Спасибо за это! – peppermcknight

+1

А если у вас есть существующий сайт MVC и вы хотите, чтобы весь код Angular2 находился под http: // serverURL/Angular2 /, но вы хотите http: // serverURL/Home/Index = MVC – Sean

+1

Может ли кто-нибудь убедиться, что это действительно работает в IIS8? Мы можем заставить это работать в IIS7.5, но не в IIS8. В IIS8 сайт работает нормально, пока вы не пытаетесь использовать сохраненный URL-адрес. – Helzgate

1

Простая замена сработала для меня, используя Angular 4.0 и IIS 6.1. Это позволило мне использовать именованный сайт вместо папки по умолчанию или перезаписи выше. Я только что изменил базовую HREF от «/» к имени моей папки приложения:

<head> 
    <base href="MyApp"> 
... 

Надеется, что это работает для других!