Получение ошибки 404 после обновления углового приложения на сервере [дубликат]

на всякий случай кто-то приходит к этому вопросу, у меня есть более простая версия.

public static MediaPlayer mp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button b = (Button) findViewById(R.id.button);
        Button b2 = (Button) findViewById(R.id.button2);


        b.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mp = MediaPlayer.create(MainActivity.this, R.raw.game);
                mp.start();
            }
        });

        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.stop();
               // mp.start();
            }
        });
    }
2
задан georgeawg 31 May 2017 в 06:18
поделиться

4 ответа

Режим HTML5 требует перезаписи URL.

Из Документов:

Режим HTML5

Серверная сторона

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

- Руководство разработчика AngularJS - Использование $ location (сторона сервера HTML5)

Для NodeJS и ExpressJS

var express = require('express');
var path = require('path');
var router = express.Router();

// serve angular front end files from root path
router.use('/', express.static('app', { redirect: false }));

// rewrite virtual urls to angular app to enable refreshing of internal pages
router.get('*', function (req, res, next) {
    res.sendFile(path.resolve('app/index.html'));
});

module.exports = router;

Для IIS в Windows

<rewrite>
  <rules>
    <rule name="AngularJS" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>
  </rules>
</rewrite>

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

Для apache

RewriteEngine On RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
RewriteRule ^

] См. Как переписать url в apache htaccess для приложения angularjs

Для получения дополнительной информации

Статья: AngularJS - Включить страницу режима HTML5 Обновить без 404 Ошибки в NodeJS и IIS .

0
ответ дан georgeawg 17 August 2018 в 13:39
поделиться
  • 1
    Я изменил .htaccess, чтобы перенаправить на index.html. теперь он отлично работает! – krishna 31 May 2017 в 05:37
  • 2
    done! – krishna 31 May 2017 в 15:30

У меня была такая же проблема с использованием http-сервера как моего локального веб-сервера, его известной проблемы с html5 и подробностей в угловом ui / ui-router FAQ .

Я переключился на Nginx (установите через apt-get) со следующим /etc/nginx/sites-enabled/default

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    #root /var/www/html;

    root /home/conor/workspace/code_institute/route_test;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    #server_name _;
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.html;
    }

 }

. Для запуска / остановки / перезагрузки после изменений;

sudo service nginx <start|stop|status>

Apache / Экспресс / asp.NET

1
ответ дан Conor 17 August 2018 в 13:39
поделиться

Ваши ссылки не работают таким образом,

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.js"></script>

<body ng-app="myApp">

  <base href="/#/" />

  <a href="blue">blue</a>

  <a href="green">green</a> //blue.html and green.html are in same directory as index.html

  <p>Click on the links to load blue or green.</p>

  <div ng-view></div>

  <script>
    var app = angular.module("myApp", ["ngRoute"]);

    app.config(function($routeProvider, $locationProvider) {
      $routeProvider
        .when("/blue/:name?", {
          templateUrl: "blue.html",
          controller: "blue_control"
        })

        .when("/green", {
          templateUrl: "green.html",
          controller: "green_control"
        })

      $locationProvider.html5Mode({
        enabled: true
      });

    });
    app.controller("blue_control", function($scope) {
      $scope.msg = "this is blue";
    });
    app.controller("green_control", function($scope) {
      $scope.msg = "this is green";
    });
  </script>


</body>

</html>

Угловая маршрутизация принимает идентификатор фрагмента (#) и использует это чтобы показать вам правильный HTML-код, если вы перейдете к yourdomain.com/green вместо yourdomain.com/#/green, сервер отправит вашему браузеру индекс каталога каталога green.

Что я сделал, это изменить ваш <base href="/" /> до <base href="/#/" />!

-1
ответ дан Luca 17 August 2018 в 13:39
поделиться
  • 1
    спасибо Luca Kiebel за ваш быстрый ответ, но я все равно получаю ту же ошибку! – krishna 30 May 2017 в 20:52

Проблема в том, что вы не назначаете переменную $ routeProvider вашему контроллеру, это приводит к тому, что контроллер не сможет получить доступ к переменной $ routeParams

попробуйте

 /*app.controller("blue_control", function($scope) {

      $scope.msg = "this is blue";
    });
    app.controller("green_control", function($scope) {
      $scope.msg = "this is green";
    });*/
 app.controller("blue_control", function($scope,$routeParams) {
     console.log( $routeParams.term_user);
      $scope.msg = "this is blue";
    });
    app.controller("green_control", function($scope,$routeParams) {
      $scope.msg = "this is green";
    });

UPDATE

Я думаю, что вы не можете использовать версию маршрута с более низкой версией angulajs, пожалуйста, измените верхнюю версию угловых символов, например

/* <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>*/

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>

<!DOCTYPE html>
<html>


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.js"></script>

<body ng-app="app">

  <base href="/#/" />

  <a href="#/blue">blue</a>

  <a href="#/green">green</a> //blue.html and green.html are in same directory as index.html

  <p>Click on the links to load blue or green.</p>

  <div ng-view></div>

  <script>
    var app = angular.module("app", ['ngRoute']);

    app.config(function($routeProvider) {
      $routeProvider
        .when("/blue/:name?", {
          templateUrl: "blue.html",
          controller: "blue_control"
        })

        .when("/green", {
          templateUrl: "green.html",
          controller: "green_control"
        })

      

    });
    app.controller("blue_control", ['MyFirstController',function($scope, $routeParams) {
      $scope.msg = "this is blue";
    }]);
    app.controller("green_control", ['MyFirstController2',function($scope, $routeParams) {
      $scope.msg = "this is green";
    }]);
  </script>


</body>

</html>

0
ответ дан marjes 17 August 2018 в 13:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: