AngularJS — ошибка 404 при перезагрузке страницы после удаления Hashbang

После удаления хэш-банга с моих маршрутов с помощью

$locationProvider.html5Mode(true);

Теперь при посещении страницы, например "domain.com/download", будет работать. Но если бы я перезагрузил именно эту страницу, это выдало бы мне ошибку 404. Ссылки типа «domain.com/download» можно открыть, только набрав «domain.com/#!/download». Как только он загрузится, он снова перенаправит меня на обычную страницу «domain.com/download».

Я использую v1.3.2 для маршрутизации и v1.6.3 для всего остального (не спрашивайте меня, почему я не сделал этот сайт, лол).


person Konstantin Schlegel    schedule 15.08.2018    source источник
comment
вам нужно настроить маршрутизацию (в .htaccess)   -  person Aleksey Solovey    schedule 15.08.2018
comment
Это обычно? Потому что мне не нужно было делать это, чтобы сами хеш-бэнги работали.   -  person Konstantin Schlegel    schedule 15.08.2018
comment
Да, это обычное дело, потому что вам нужно сделать это, чтобы URL-адреса без хэш-банга работали. (Ваше угловое приложение на самом деле находится по пути /; хеш-часть URL-адреса игнорируется при определении пути, поэтому /#!/все, что все еще указывает на /. /download, по умолчанию указывает на другой путь, который не является вашим app; поэтому вам нужно перенастроить свой веб-сервер, чтобы все URL-адреса указывали на один и тот же путь, откуда Angular сможет выяснить, что с ним делать.)   -  person Daniel Beck    schedule 15.08.2018


Ответы (1)


Вот что говорится в документации AngularJS:

Использование этого режима требует перезаписи URL-адреса на стороне сервера, в основном вам нужно переписать все ваши ссылки на точку входа вашего приложения (например, index.html). Требование тега также важно в этом случае, поскольку оно позволяет AngularJS различать часть URL-адреса, которая является базой приложения, и путь, который должен обрабатываться приложением.

Вам придется изменить .htaccess на что-то вроде:

RewriteEngine On 
Options FollowSymLinks

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /#/$1 [L]
person Kyle Krzeski    schedule 15.08.2018
comment
(Этот ответ предполагает, что они используют apache в качестве веб-сервера; другим веб-серверам потребуется другая конфигурация. Обратите внимание также на незначительную опечатку в .htaccess) - person Daniel Beck; 15.08.2018
comment
Исправлена ​​опечатка. Да, это предполагает apache, хотя вы можете легко найти то, что вам нужно для других конфигураций. - person Kyle Krzeski; 15.08.2018
comment
Это сработало, спасибо. - person Konstantin Schlegel; 15.08.2018