2017-01-31 5 views
2

У меня есть приложение в AngularJS, где мне нужно установить html5mode в true, чтобы удалить хеш /#/ из URL. Приложение в минитипированной версии находится в папке dist.htaccess переписать в папку dist и установить AngularJS html5mode true

ВОПРОС: Моя цель - переписать трафик на папку dist и разрешить включение html5mode. Может ли кто-нибудь помочь?

я могу получить html5mode работать, установив <base href="/" /> и добавления $locationProvider.html5Mode(true); в приложении конфигурацию и в нижней части интерфейса маршрутизаторы файла.

Все это работает в режиме разработки, где используется NodeJS через Gulp. Когда я переношу приложение в другие среды, находящиеся на Apache, у установки есть проблемы.

Проблемы:

A. Приложение не может загружать какие-либо активы, потому что он ищет их в корневом каталоге сервера.

B. Приложение не может перезагрузить и приземлиться на запрошенный URL. Это дает ошибку 404.

Без использования html5mode в приложении, я использую этот htaccess для перенаправления на папку dist, и она отлично работает.

# This first part is not relevant for the question but is included for practical purposes. It rewrites traffic to HTTPS 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(app\.)?example\.com$ [NC] 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301] 

Options +FollowSymLinks 
RewriteCond %{REQUEST_URI} !(.*)dist 
RewriteRule ^(.*)$ dist/$1 [L] 

Нужно работать то же самое на разностных средах, чтобы я мог использовать его как на локальных, так и на других средах. О местном было бы на localhost/project_name/app/webapp/(dist) и в других средах, это было бы на https://app.example.com/(dist)

Я также попытался установить <base href="/dist/" />, но он также не работает. Он добавляет только папку dist в путь к активам и также не будет использоваться при разработке, потому что приложение не будет отправлено с dist.

В основном детали работают, но при объединении они терпят неудачу.

Я прошел через многие SO ответы уже без успеха:

in html5mode(true) views are not loading in page refresh in angular js

AngularJS + html5Mode + custom fallback

angularjs ngroute with html5mode(true) on apache fails

AngularJS: html5Mode(true) causing 404 error

+0

Вы используете Apache?Создайте новый VHOST, который указывает прямо в вашу папку 'dist'. Будь проще. – lin

ответ

0

Вместо того, чтобы бороться с правилами перезаписи, если у вас есть Apache2, определите fallbackresource вместо этого.

Эти две строки кода в файле .htaccess будет решить вопрос:

FallbackResource /index.php 
DirectoryIndex index.html 

Вторая строка необходима, так как только Google Chrome.

To learn more about fallback resources, see the Apache documentation here