Настройте модуль перезаписи URL-адресов IIS для AngularJS HTML5Mode, который все еще не работает

Я искал информацию о настройке модуля IIS URL Rewrite для работы с AngularJS HTML5Mode и даже попробовал информацию, которую нашел по другому вопросу:

Как настроить IIS для перезаписи URL-адресов приложения AngularJS в режиме HTML5?

Я внес изменения в свой IIS, как показано в вопросе, найденном в приведенной выше ссылке, и установил базовый URL-адрес, и сайт работает, когда я посещаю корневой сайт (например, http: // localhost / appname /). Все мои взгляды и маршрутизация работают нормально.

Тем не мение; когда я пытаюсь посетить определенный URL-адрес (например, http: // localhost / appname / about) в новой вкладке или в окне браузера, я получаю 404. Что-то еще мне не хватает ???

Я использую Windows 7, IIS 7 с установленным модулем перезаписи URL.

** Мне пришлось разделить протокол, чтобы разрешить принятие URL-адреса примера.


person miguelfeliciano    schedule 27.11.2012    source источник
comment
Я бы рекомендовал использовать Charles или Dev Tools для просмотра фактического заголовка, возвращаемого из .htaccess. Он покажет URL-адрес, который сервер пытается обслужить. Затем попробуйте напрямую попасть по этому URL-адресу. Мне кажется, что либо реальный URL-адрес не работает, либо при переписывании он формируется неправильно.   -  person Sharondio    schedule 27.11.2012
comment
Я использовал Fiddler для просмотра ответов на прямые URL-запросы, которые я делал на фактические ссылки, которые работают, когда я щелкаю мышью и получаю в ответ 404. Я также смотрел запросы, когда я просто щелкал, начиная с корня, и обнаружил, что запросы относятся к частичным (т.е. localhost / app / partials / app.html) вместо того, что находится в URL-адресе (localhost / app / index.html или просто localhost / app /)   -  person miguelfeliciano    schedule 27.11.2012
comment
Запрос показывает путь, который у меня есть в моем templateUrl в моей маршрутизации, вместо использования значения пути.   -  person miguelfeliciano    schedule 27.11.2012
comment
У меня была аналогичная проблема, и я решил ее здесь, stackoverflow.com/a/24921686/965935   -  person Josh C    schedule 24.07.2014
comment
См. Мой ответ и другие ответы на этот [вопрос] [1] [1]: stackoverflow.com/questions/12614072/   -  person Yagiz Ozturk    schedule 02.10.2014


Ответы (1)


Установите это расширение: https://www.iis.net/downloads/microsoft/url-rewrite

И добавьте это в web.config в system.webServer

<rewrite>
  <rules>
    <clear />        
    <rule name="Html5Mode" enabled="true" stopProcessing="true">
      <match url="^(.+)$" negate="true" />
      <conditions>
        <add input="{REQUEST_URL}" pattern="^(.+)$" negate="true" />
      </conditions>
      <action type="Rewrite" url="/index.html" logRewrittenUrl="true"/>
    </rule>
    <rule name="AngularJS" enabled="true" 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="/index.html" />
    </rule>        
  </rules>
</rewrite>

Вот полный файл web.config, включая обслуживание статических файлов.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
          <rules>
            <clear />        
            <rule name="Html5Mode" enabled="true" stopProcessing="true">
              <match url="^(.+)$" negate="true" />
              <conditions>
                <add input="{REQUEST_URL}" pattern="^(.+)$" negate="true" />
              </conditions>
              <action type="Rewrite" url="/index.html" logRewrittenUrl="true"/>
            </rule>
            <rule name="AngularJS" enabled="true" 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="/index.html" />
            </rule>        
          </rules>
        </rewrite>
        <handlers>
           <clear />
            <add 
                name="StaticFile" 
                path="*" verb="*" 
                modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" 
                resourceType="Either" 
                requireAccess="Read" />
        </handlers>
        <staticContent>
            <mimeMap fileExtension=".*" mimeType="application/octet-stream" />
        </staticContent>
    </system.webServer>
</configuration>
person stibay    schedule 12.01.2017