У меня есть сайт AngularJS (1.4.5), который размещен на сервере apache2 с небольшим экземпляром NodeJS, который обслуживает связь с бэкэнд, а также размещает веб-сайт, я использую apache2 sites-available.conf
для перенаправления порта
URL-адрес выглядит следующим образом:
http://prod.mywebsiteurl.com/myapp/#/mp
Последний путь является динамическим, когда приложение Angular запущено, он принимает последний параметр с: (я настроил это с помощью $ routeProvider
dynamicUrl = $routeParams.dynamicUrl;
в функции init()
.
Когда я html5mode
с:
$locationProvider.html5Mode(true);
Я не могу получить доступ к веб-сайту:
http://prod.mywebsiteurl.com/myapp/mp
Он дает ошибку apache2.
Cannot GET /MP (404)
Однако, если я набираю старый адрес, с #
он перенаправляет на сайт без #
.
Любая идея, как это решить? Это конфигурация apache2? Если так? Как мне это сделать? Я настоящий apache2 noob.
Я думаю, что должен иметь файл.htaccess и использовать это небольшое правило перезаписи.
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
Я нашел его на этой странице: https://ngmilk.rocks/2015/03/09/angularjs-html5-mode-or-pretty-urls-on-apache-using-htaccess/
Но я использую узел как веб-сервер, поэтому я действительно не знаю, где разместить файл, а сервер - сервер Ubuntu. Я поместил его в корневой узел NodeJS, но, похоже, он не работал очень хорошо.
Любая помощь оценивается.
Я думаю, для вашего углового приложения у вас есть только одна точка входа (index.html), а затем внутренняя маршрутизация сделает все для вас. То, что вам нужно сделать в узле, - это каждый вызов, который вы возвращаете index.html.
К сожалению, су не указал, что вы использовали в узле, если это фреймворк или нет. Предполагая, что у вас есть экспресс-экземпляр, вы можете сделать следующее:
var express = require('express');
var server = express();
server.use('/public', express.static(__dirname + '/public'));
server.get('/*', function(req, res){
res.sendFile(__dirname + '/index.html');
});
var port = 8000;
server.listen(port, function() {
console.log('server listening on port ' + port);
});
server.get('/*'
это будет принимать любой вызов в основном и всегда будет возвращать index.html, поэтому ваше угловое приложение может начать