Включение режима HTML 5 в AngularJS 1.2

Я работаю над приложением, которое должно использовать режим HTML 5. Из-за того, что я переношу существующий сайт на использование AngularJS 1.2, я не могу иметь теги "#" в своем URL-адресе. В настоящее время у меня есть следующее:

angular.module('myApp', ['ngRoute']).
  config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);

  $routeProvider
    .when("/home", {templateUrl:'home.html', controller:'homeController'})
    // other routes are defined here..
    .otherwise({redirectTo: '/home'});
  }]);

К сожалению, когда я посещаю 'http://myServer/home', мое приложение не работает, когда включен режим html 5. Я получаю 404. Однако, когда я навещаю http://myServer/, он работает. Его как глубокая привязка не работает, когда у меня включен режим html5. Если я прокомментирую строку, которая говорит "$ locationProvider.html5mode (true);", функции сайта. Однако еще раз, я не могу иметь хэш-теги в своем URL-адресе из-за того, что я переношу существующий сайт.

Я не понимаю, как работает html5mode (true)? Или я делаю что-то неправильно?

Спасибо

Ответы

Ответ 1

Если вы используете html5mode, вам нужно внести изменения на стороне сервера, чтобы вернуть точку входа index.html (страница основного приложения) по любому запросу URL-адреса. Затем приложение angular будет анализировать URL-адрес и загружать необходимую страницу.

Ответ 2

Здесь приведен список решений для большинства распространенных веб-серверов: Apache, nginx, IIS и express. https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#wiki-how-to-configure-your-server-to-work-with-html5mode

Ссылка находится в wi-router wiki, но она не имеет к этому никакого отношения, этот ответ действителен с ngRoute.

Ответ 3

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

Шаг 1: Внесите провайдера местоположений в модуль приложения и установите для html5mode значение true

$locationProvider.html5Mode(true);

Шаг 2. Вставьте базовый тег в свой index.html Некоторые люди говорят, что это не требуется, но у меня возникла ошибка, когда я попытался удалить тег и реализовать его. Он говорит, что locationProvider требует базовый тег.

<base href="/specify-app-directory-here/">

Если он находится в корне, следующая строка будет достаточной

<base href="/">

Шаг 3: вам потребуется настроить перерисовку URL-адресов на вашем сервере. Я, сам новичок, но нашел это довольно простым. Если вы используете Apache, именно так вы это делаете.

Создайте .htaccess и поместите его в тот же каталог, что и index.html, или вы даже можете использовать существующий. Добавьте следующие строки в .htaccess

Options +FollowSymLinks 

RewriteEngine On
RewriteBase /base-as-specified-in-base-tag/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([a-zA-Z]+)$ #/$1 [NC,L]

Последняя строка - это то, что очень важно. В основном, он сообщает вашему серверу, если он найдет какие-либо ссылки в форме "/home", он перенаправит его на "/#/home", который может обрабатывать angularJS соответствующим образом. При этом он фактически не изменяет URL-адрес, отображаемый в адресной строке, и у вас есть довольно URL-адрес. Если вы попытаетесь также перезагрузить страницу, вы не получите ошибку 404.

Надеюсь, что это поможет.

Ответ 4

сначала включить $locationProvider.html5Mode (true);

после включения html 5 mode true вы можете вставить этот код в .htaccess

НАЧАТЬ

Параметры + FollowSymLinks

 RewriteEngine on

     RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.*) your file root /index.php [NC,L]

END